В настоящее время я запрашиваю JsonObject через веб-запрос AsyncHttpClient (loopj), однако запрос довольно медленный, и мне нужен объект для продолжения. В настоящее время программа аварийно завершает работу, поскольку сохраняемый объект пуст, а функция сохранения вызывается до завершения веб-запроса.
Вот фрагмент моего кода того, что я пытаюсь сделать:
btnCreate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AsyncHttpClient client = new AsyncHttpClient();
String apiAddress = MYAPIADDRESS;
client.get(apiAddress,
new JsonHttpResponseHandler() {
//@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
try {
JSONObject tempTransition = response.getJSONArray("items").getJSONObject(0).getJSONObject("snippet");
Toast.makeText(getApplicationContext(), tempTransition.get("description").toString(), Toast.LENGTH_SHORT).show();
if(!dirDirectoryJson.contains(tempTransition)){
dirDirectoryJson.add(tempTransition);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray timeline) {
}
@Override
public void onFinish() {
// Completed the request (either success or failure)
}
});
//*** Crashes here ****
//dirDirectoryJson returning null object from above due to call before complete web request and crashes the program
try {
getDescription = dirDirectoryJson.get(0).getString("description").toString().trim();
setDescription( getDescription );
} catch (JSONException e) {
e.printStackTrace();
}
}
Я пробовал SyncHttpClient, заставлял поток спать и т. д., а также видел/пробовал эти (и многие другие) ссылки,
Как дождаться окончания асинхронного http, прежде чем продолжить?< /а>
https://forum.qt.io/topic/5389/how-to-ensure-full-asynchronous-web-requests
Как дождаться завершения всех запросов
Как заставить основной поток ждать, когда я не знаю, когда асинхронная задача завершит работу?
Я также попытался поджарить полученный объект, комментируя сохраняющую часть кода. (прокомментировано выше) Код не дал сбой, но тост появляется только через некоторое время, когда веб-запрос завершен.
Как мне решить эту проблему? (т. е. успешно сохранить объект без сбоя приложения только после завершения веб-запроса). Я очень долго искал в Интернете, но не смог найти работающий метод, и я новичок в Android.
Пожалуйста, помогите и дайте мне знать, если потребуется дополнительная информация. Заранее спасибо!