Платформа Bolts: onSuccess вносит изменения в пользовательский интерфейс / основной поток

#android #android-asynctask #bolts-framework

#Android #android-asynctask #bolts-framework

Вопрос:

Возможно ли отобразить сообщение или внести изменения в поток пользовательского интерфейса после завершения выполнения задачи callInBackground?

Что-то вроде следующего:

 Task.callInBackground(new Callable<String>() {
            @Override
            public String call() {


                for(int i=0; i<3; i  ){
                    Log.i("I=", String.valueOf(i));

                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                String obj = "";
                return null;
            }
        }).onSuccess(new Continuation<String, Object>() {
            @Override
            public Object then(Task<String> task) throws Exception {
                Log.i("I=", "Counter complete");

                Toast.makeText(MainLoanMemberActivity.this, "Finished", Toast.LENGTH_SHORT).show();
                btnAgriLoan.setText("LOL");
                return null;
            }
        });
  

На данный момент не отображается всплывающее сообщение, а также нет сбоя.

Ищу эквивалент onPostExecute от AsyncTask в Bolts Framework, где можно добавлять изменения в пользовательский интерфейс.

Ответ №1:

Не понял, что существуют типы ИСПОЛНИТЕЛЕЙ, которые вы можете упомянуть с каждой вспомогательной функцией, например: (Задача.UI_THREAD_EXECUTOR)

 Task.callInBackground(new Callable<String>() {
            @Override
            public String call() {
                for(int i=0; i<3; i  ){
                    Log.i("I=", String.valueOf(i));
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                String obj = "";
                return null;
            }
        }).onSuccess(new Continuation<String, Void>() {
            public Void then(Task<String> object) throws Exception {
                Toast.makeText(MainLoanMemberActivity.this, "Finished", Toast.LENGTH_SHORT).show();
                btnAgriLoan.setText("LOL");
                return null;
            }
        }, Task.UI_THREAD_EXECUTOR);
  

Документы помогли!