OnProgressUpdate не может установить текст в TextView - PullRequest
0 голосов
/ 05 ноября 2019
protected Long doInBackground(String... address) {
            while(true){
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                setProgress(100);
                onProgressUpdate(getping(address[0]));
            }
        }    

protected void onProgressUpdate(Long... values){
                result.setText(String.valueOf(values[0]));
                builder.setContentText(String.valueOf(values[0]));
                notificationManager.notify(1,builder.build());
            }

Этот блок отлично работает на Android Oreo и выше, но не может установить текст на любой версии ниже

LOG CAT: -

11-05 16: 18: 26.041 4720-4752 / com.pcartistofficial.pingtesterforgames E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: AsyncTask # 1 Процесс: com.pcartistofficial.pingtesterforgames, PID: 4720 java.lang.RuntimeExack: произошла ошибка во время выполнения) на android.os.AsyncTask $ 3.done (AsyncTask.java:304) на java.util.concurrent.FutureTask.finishCompletion (FutureTask.java:355) на java.util.concurrent.FutureTask.setException (FutureTask.js)) в java.util.concurrent.FutureTask.run (FutureTask.java:242) в android.os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask.java:231) в java.util.concurrent.ThreadPoolExecutor.RjoWecutor: 1112) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:587) в java.lang.Thread.run (Thread.java:818), вызванный: android.view.ViewRootImpl $ CalledFromWrongThreadExcepнация: только исходный поток, создавший иерархию представлений, может касаться его представлений. на android.view.ViewRootImpl.checkThread (ViewRootImpl.java:6357) на android.view.ViewRootImpl.invalidateChildInParent (ViewRootImpl.java:909) на android.view.ViewGroup.invalidateChild (View4690) jjView.invalidateInternal (View.java:11801) на android.view.View.invalidate (View.java:11765) на android.view.View.invalidate (View.java:11749) на android.widget.TextView.checkForRelayout (TextView.java: 6858) в android.widget.TextView.setText (TextView.java:4057) в android.widget.TextView.setText (TextView.java:3915) в android.widget.TextView.setText (TextView.java:3890)по адресу com.pcartistofficial.pingtesterforgames.MainActivity $ BackgroundTasker.onProgressUpdate (MainActivity.java:96) по адресу com.pcartistofficial.pingtesterforgames.MainActivity $ BackgroundTasker.doInBackground (MainActivity.java:90) по адресу com.pcartistFack.MackerFame.of(MainActivity.java:67) на android.os.AsyncTask $ 2.call (AsyncTask.java:292) на java.util.concurrent.FutureTask.run (FutureTask.java:237) в android.os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask.java:231) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:11)concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:587) в java.lang.Thread.run (Thread.java:818)

1 Ответ

1 голос
/ 05 ноября 2019

Я предполагаю, что вы вызываете этот метод непосредственно в методе doInBackground, чтобы вызвать это исключение. Вместо этого попробуйте вызвать publishProgress ({ваши значения}) в методе doInBackground, который вызывает метод onProgressUpdate

Ссылка на документацию по API AsyncTask

...