После нажатия пользователем кнопки запускается функция погоды. Но он не регистрирует данные 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);
}
}
Вы обязательно должны загрузить свои данные в фоновом режиме. Основной поток, т.е. Поток пользовательского интерфейса, является потоком, который визуализирует компоненты пользовательского интерфейса, поэтому там не нужно выполнять никаких тяжелых операций. Если тяжелая операция выполняется в потоке пользовательского интерфейса, он замораживает пользовательский интерфейс.
Вы должны посмотреть на класс AsyncTask, чтобы выполнить загрузку в фоновом режиме.
Вот несколько хороших уроков:
Все операции ввода-вывода должны выполняться в фоновом режиме, потому что все эти операции занимают много времени. Это означает, что вы заблокируете свой основной поток, если не выполняете эти коды в фоновом режиме, и это может вызвать исключение Android Not Respond. Операции ввода-вывода в потоке пользовательского интерфейса обычно приводят к плохому пользовательскому опыту. поэтому я настоятельно советую вам сделать это в фоновом режиме.