Я использую пакет залпа для получения данных с веб-сайта (JSON).
Вот мой метод
private void getEarthquakeList(){
// ...
// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
//Earthquake Feeder
String url ="https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_month.geojson";
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("Response is: ",response);
//Parsing Json
parseJson(response);
final ListView earthquakeListView = (ListView)findViewById(R.id.list);
//Sort the array according to magnitude
earthquakeArrayList.sort((a, b) -> Double.compare(b.getTime(), a.getTime()));
mAdapter = new EarthquakeAdapter(getApplicationContext(), earthquakeArrayList);
earthquakeListView.setAdapter(mAdapter);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Error",error.getMessage());
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
}
Проблема в том, что сейчас я обновляю пользовательский интерфейс внутри этогометод после того, как он возвращает ответ.
Это строки
//Sort the array according to a date
earthquakeArrayList.sort((a, b) -> Double.compare(b.getTime(), a.getTime()));
mAdapter = new EarthquakeAdapter(getApplicationContext(), earthquakeArrayList);
earthquakeListView.setAdapter(mAdapter);
Пока я работаю в MainActivity, проблем нет, пользователь открывает приложение и получает список землетрясений.
Проблемы начинаются, когда я хочу переключиться на службу, где я наблюдаю каждые несколько минут, или когда содержание веб-сайта меняется.Поэтому я хочу, чтобы мой метод без обновления интерфейса в нем.Проблема в том, что если я не обновляю пользовательский интерфейс внутри onResponse, поток пользовательского интерфейса продолжает и приводит к пустому массиву.
Таким образом, этот массив остается пустым earthquakeArrayList
, если я не делаю это внутри
public void onResponse(String response)
Идеи о том, как разделить два, с одной стороны, запустив метод и извлекая данные, а с другой стороны, основной поток сможет получить доступ к данным и не завершить выполнение.Спасибо EG