Android java AsyncTask ждать метод возврата onPostExecute - PullRequest
0 голосов
/ 16 ноября 2018

Я написал следующий код, я ищу способ сделать http-вызов, обработать данные и позволить мне вернуть результат.

Проблема заключается в асинхронной операции, когда я выполняю html.getTi(), не дает мне никакого значения, потому что операция все еще выполняется, и я быстрее.

Я пытался использовать: synchronized (this) {.. Java, но это не похоже на работу.

Я думалоб использовании цикла ожидания:

while(html.getFlg ()! = false);

, но он требует слишком много ресурсов и зависает.

Я думал об использовании callbacks или promises, ноЯ не знаю, если это правильный путь.

Несколько советов?

Main.java

Html html = new Html().execute("...");
html.getTi();//return element ArrayList<ListItem>

Html.java

public class Html extends Activity {

    ArrayList<ListItem> listItemList = new ArrayList<ListItem>();

    public Html execute(String str) {
        new Http().execute(str);
        return this;
    }

    public ArrayList<ListItem> getTi() {
        return listItemList;
    }

    public class Http extends AsyncTask<String, Void, Void> {
        @Override
        protected void onPreExecute() { super.onPreExecute(); }

        @Override
        protected Void doInBackground(String... params) {
...
        }

        @Override
        protected void onPostExecute(Void result) {
...
        }

    }

}

1 Ответ

0 голосов
/ 16 ноября 2018

Вы можете просто использовать библиотеку okHttp

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
                     .url(YOUR_URL)
                     .build();

client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        e.printStackTrace();
    }

    @Override
    public void onResponse(Call call, final Response response) throws IOException {
        if (!response.isSuccessful()) {
            throw new IOException("Unexpected code " + response);
        } else {
        // do something wih the result
    }
}
...