В основном в моем приложении для Android. Я хочу, чтобы пользователь просматривал города по всему миру, поэтому я использую api для получения всех городов мира и хранения в ArrayList
, это был выполнен в методе okhttp onResponse
, и после этого список становится пустым. Этот список массивов содержит значения только в onResponse
, но я хочу использовать его во всем моем классе после выполнения. Может ли кто-нибудь дать мне какие-нибудь идеи по этому поводу? Вот код.сохранить данные, полученные в методе onResponse, доступного по всему классу
onCreate(){
OkHttpClient client = new OkHttpClient();
final Request request = new Request.Builder()
.url("https://raw.githubusercontent.com/David-Haim/CountriesToCitiesJSON/master/countriesToCities.json")
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
try {
fullObject = new JSONObject(response.body().string());
JSONArray s = fullObject.names();
for(int i=0; i<s.length(); i++) {
JSONArray citiesOfOneCoutry = null;
citiesOfOneCoutry = fullObject.getJSONArray(s.getString(i));
for(int j=0; j<citiesOfOneCoutry.length();j++) {
allCities.add(citiesOfOneCoutry.getString(j));
}
Log.d(TAG, "onResponse: in for "+allCities.size());
}
Log.d(TAG, "onResponse: outside for "+allCities.size()); //gives full size.
} catch (JSONException e) {
e.printStackTrace();
}
Log.d(TAG, "onResponse: outside try "+allCities.size()); //gives full size
}
});
Log.d(TAG, "outside response inside oncreate"+allCities.size()); //gives 0
}
Я вижу в журналах, что сообщение из-за пределов onResponse
один является первым, а затем обратный вызов становится казнены. это вполне понятно, но я хочу, чтобы трюк получил ArrayList
после выполнения ответа.
замечательные .. это работает .. спасибо за тонну. –