Мне нужно отправить последовательность вызовов API, где ответ на первый вызов содержит адрес API, необходимый для второго вызова. Затем я хочу отправить результаты второго вызова обратно в MainActivity. Кроме того, каждый ответ обновляется с течением времени, когда возвращаются результаты этих вызовов.
Я настроил свой код для использования последовательности AsyncTasks с критериями успеха и неудачи, чтобы они оставались активными. Несмотря на изучение практически каждой статьи, которую я могу по этому поводу, ни одна из них, похоже, не показывает, как ссылаться и анализировать возвращенную переменную из метода execute () в коде вместо непосредственного обновления графического интерфейса. Мне также нужно сделать все это без утечки памяти или блокировки основных потоков.
class CheckItemStatus extends AsyncTask<Void, Void, String> {
private final String itemName;
String mResponse = "";
String submitReportURL = "stackoverflow.com";
public CheckItemStatus(String itemName) {
this.itemName = itemName;
}
protected String doInBackground(Void... urls) {
new RetrieveFeedTask(submitReportURL).execute();
return mResponse;
}
protected void onPostExecute(String response) {
super.onPostExecute(response);
String reportURLResponse = "";
// TODO: Retrieve new response
Log.i("APP", "Item check submitted! Response: " + reportURLResponse);
String reportURL = ""; // TODO: Parse new response for report URL
new CheckReportResults(itemName, reportURL).execute();
}
}
class CheckReportResults extends AsyncTask<Void, Void, String> {
private final String itemName;
private final String reportURL;
String mResponse = "";
public CheckReportResults(String itemName, String reportURL) {
this.itemName = itemName;
this.reportURL = reportURL;
}
protected String doInBackground(Void... urls) {
Log.i("APP", "Waiting for results for item " + itemName);
new RetrieveFeedTask(reportURL).execute();
return mResponse;
}
protected void onPostExecute(String response) {
super.onPostExecute(response);
}
}
class RetrieveFeedTask extends AsyncTask<Void, Void, String> {
String URL;
public RetrieveFeedTask(String URL) {
this.URL = URL;
}
protected String doInBackground(Void... urls) {
String response="{\n" +
" \"reportURL\": \"stackoverflow.com\"\n" +
"}";
// Open Connection and Get Response
return response;
}
protected void onPostExecute(String response) {
super.onPostExecute(response);
if (response == null) {
response = "THERE WAS AN ERROR";
}
Log.i("INFO", "Response: " + response);
}
}
В настоящее время код выполняется, но я не знаю, как анализировать и ссылаться на эти ответы вне класса AsyncTask.