JSON должен быть загружен в фоновом режиме?

1

После нажатия пользователем кнопки запускается функция погоды. Но он не регистрирует данные JSON или ошибки. Это должно быть сделано в фоновом режиме? Я использовал gson libary для загрузки JSON.

Изменение: я отредактировал свой код, но пользователь должен ввести город, который будет вставлен в ссылку. Так можно ли запускать в фоновом режиме при нажатии кнопки?

public class MainActivity extends AppCompatActivity {

public class Download extends AsyncTask<String,Void,String>{


    @Override
    protected String doInBackground(String... strings) {
        try {
            URL url = new URL("api.openweathermap.org/data/2.5/weather?q="+strings[0]+"&APPID=****");
            URLConnection request = url.openConnection();
            request.connect();
            JsonParser jp=new JsonParser();
            JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent()));
            JsonObject rootobj = root.getAsJsonObject();
            String weather = rootobj.getAsString();
            Log.i("weather:",weather);

        }
        catch (Exception e){
            e.printStackTrace();;
        }
        return null;
    }
}


public void weather(View view){
    TextView textView=(TextView) findViewById(R.id.editText);
    String city=textView.getText().toString();
    Download download=new Download();
    download.execute(city);



}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

}

Теги:

2 ответа

0

Вы обязательно должны загрузить свои данные в фоновом режиме. Основной поток, т.е. Поток пользовательского интерфейса, является потоком, который визуализирует компоненты пользовательского интерфейса, поэтому там не нужно выполнять никаких тяжелых операций. Если тяжелая операция выполняется в потоке пользовательского интерфейса, он замораживает пользовательский интерфейс.

Вы должны посмотреть на класс AsyncTask, чтобы выполнить загрузку в фоновом режиме.

Вот несколько хороших уроков:

0

Все операции ввода-вывода должны выполняться в фоновом режиме, потому что все эти операции занимают много времени. Это означает, что вы заблокируете свой основной поток, если не выполняете эти коды в фоновом режиме, и это может вызвать исключение Android Not Respond. Операции ввода-вывода в потоке пользовательского интерфейса обычно приводят к плохому пользовательскому опыту. поэтому я настоятельно советую вам сделать это в фоновом режиме.

  • 0
    Но прежде чем сделать это в фоновом режиме, пользователь должен ввести город, в который вставляется ссылка

Ещё вопросы

Сообщество Overcoder
Наверх
Меню