Доступ к фрагментным объектам из отдельного потока AsyncTask - PullRequest
0 голосов
/ 04 мая 2018

Я вызываю asyncTask из фрагмента, чтобы поработать в сети. Пока он работает, мне нужно иметь возможность отключить кнопку во фрагменте, пока AsyncTask не вызовет onPostExecute.

Моя единственная проблема в том, что я не могу получить доступ к таким кнопкам из doInBackground:

Button mButtom = mActivity.findViewById(R.id.testButton);

это приходит с:

java.lang.RuntimeException: An error occured while executing doInBackground()
     at android.os.AsyncTask$3.done(AsyncTask.java:300)
     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
     at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.IllegalStateException: The current thread must have a looper!

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

У нас есть функция runOnUIThread

@Override protected String doInBackground(String... strings) {
    activity.runOnUiThread(new Runnable() {
      @Override public void run() {
    //do your action
      }
    });
    return "";
  }
0 голосов
/ 04 мая 2018

Для взаимодействия с пользовательским интерфейсом из AsyncTask переопределите один или несколько из onPreExecute, onPostExecute и onProgressUpdate. Последний будет вызываться всякий раз, когда вы звоните publishProgress в doInBackground.

...