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及更高版本上工作正常,但无法在以下任何版本上设置文本

日志猫:-

11-05 16:18:26.041 4720-4752 / com.pcartistofficial.pingtesterforgames E / AndroidRuntime:致命例外:AsyncTask#1进程:com.pcartistofficial.pingtesterforgames,PID:4720 java.lang.RuntimeException:执行doInBackground时发生错误()在android.os.AsyncTask $ 3.done(AsyncTask.java:304)在java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)在java.util.concurrent.FutureTask.setException(FutureTask.java: 222),位于java.util.concurrent.FutureTask.run(FutureTask.java:242),位于android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231),位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor)。 java:util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587)上的java:1112)java.lang.Thread.run(Thread.java:818)上的原因:android.view.ViewRootImpl $ CalledFromWrongThreadException:仅创建视图层次结构的原始线程可以触摸其视图。 在android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6357)在android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:909)在android.view.ViewGroup.invalidateChild(ViewGroup.java:4690)在android.view。 android.view.View.invalidate(View.java:11765)的android.view.View.invalidate(View.java:11749)的android.widget.TextView.checkForRelayout(TextView的View.invalidateInternal(View.java:11801) .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.pcartistofficial.pingtesterforGames.Maincomity (MainActivity.java:67)在android.os.AsyncTask $ 2.call(AsyncTask.java:292)在java.util.concurrent.Futur 位于java.util.android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231)的eTask.run(FutureTask.java:237)来自java.util的java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)的eTask.run(FutureTask.java:237)。 java.lang.Thread.run(Thread.java:818)上的current.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587)

===============>>#1 票数:1 已采纳

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及更高版本上工作正常,但无法在以下任何版本上设置文本

日志猫:-

11-05 16:18:26.041 4720-4752 / com.pcartistofficial.pingtesterforgames E / AndroidRuntime:致命例外:AsyncTask#1进程:com.pcartistofficial.pingtesterforgames,PID:4720 java.lang.RuntimeException:执行doInBackground时发生错误()在android.os.AsyncTask $ 3.done(AsyncTask.java:304)在java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)在java.util.concurrent.FutureTask.setException(FutureTask.java: 222),位于java.util.concurrent.FutureTask.run(FutureTask.java:242),位于android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231),位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor)。 java:util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587)上的java:1112)java.lang.Thread.run(Thread.java:818)上的原因:android.view.ViewRootImpl $ CalledFromWrongThreadException:仅创建视图层次结构的原始线程可以触摸其视图。 在android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6357)在android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:909)在android.view.ViewGroup.invalidateChild(ViewGroup.java:4690)在android.view。 android.view.View.invalidate(View.java:11765)的android.view.View.invalidate(View.java:11749)的android.widget.TextView.checkForRelayout(TextView的View.invalidateInternal(View.java:11801) .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.pcartistofficial.pingtesterforGames.Maincomity (MainActivity.java:67)在android.os.AsyncTask $ 2.call(AsyncTask.java:292)在java.util.concurrent.Futur 位于java.util.android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231)的eTask.run(FutureTask.java:237)来自java.util的java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)的eTask.run(FutureTask.java:237)。 java.lang.Thread.run(Thread.java:818)上的current.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587)

  ask by Zeeshan Mustafa translate from so

未解决问题?本站智能推荐:

2回复

使用setText()更新TextView在AsyncTask onProgressUpdate()中不起作用

我正在尝试使用有关AsyncTask正在进行的后台任务的信息来更新我的用户界面。 这是我的onProgressUpdate()方法。 但是,没有一个TextView更新其文本。 我在doInBackground()方法中调用publishProgress() 。 日志显示onPro
2回复

在我的主线程中使用AsyncTask(Android)中的“OnProgressUpdate”中的信息

我正在使用正在侦听服务器的AsyncTask,并在每次收到消息时生成publishProgess(receivedMessage),因此我将特定消息保存在字段“ArrayList messageStrings;”中。 现在我想从AsyncTask类的Outside访问“messageStr
3回复

setText到AsyncTask中的TextView

我只想在获取给定URL的内容后将setText设置为TextTextView,这是我做错了什么? 我创建了仅应将setText设置为已定义的textview的类,但由于在运行该应用程序时仅得到空白的textView,因此似乎存在问题。 异步任务的代码: 和主类定义如下:
1回复

从活动返回时无法设置Textview中的setText

我正在使用countdowntimer进行倒计时这是我的代码: 最初这可以正常工作,但是当我离开此活动然后再转到另一个活动然后再返回时,textview不再倒计时了吗? TextView电视继续通过该行运行,但是不会更新。 活动是否已释放并初始化Textview的相同ID? 任何提
2回复

在Asynctask中为onProgressUpdate使用2个不同的类的任何示例吗?

我一直在到处寻找这个问题,唯一的答案是“使用Pair”,但是我也无法使它正常工作。 这是我需要做的:在Asynctask中,我需要更新进度条和文本。 因此,我的Asynctask泛型不能只是Integer,而不仅是String,而且不能两者都是。 这样一来,我可以在“ onProgre
1回复

如何使用Runnable回调替换AsyncTask onProgressUpdate()

我正尝试在不使用Kotlin Coroutines或其他库的情况下替换不推荐使用的AsyncTask 具有以下结构的MyTask对象 MyCallable只是一个简单的界面 并使用此MyTaskRunner执行它们 它有效,但是我无法弄清楚如何正确复制AsyncTask的publis
2回复

AsyncTask:如何使用onProgressUpdate与另一个类进行通信

我已经设置了AsyncTask 。 在doInBackground() ,唯一的工作是从另一个类调用方法。 该方法是从旧的Java Applet复制而来的,因此在执行时,它将每10%的进度直接打印到屏幕上直到完成。 由于在Android中不建议这样做,因此我使用AsyncTask来运行
2回复

onProgressUpdate没有运行

我正在使用Retrofit从api接收json数据,并且效果很好,但是将来我想显示进度条。 我决定实现onProgressUpdate,以检查是否调用了此方法,但是在检查Logcat选项卡时,它不起作用。 也就是说,该方法未运行。 AsyncTask类中的所有其他方法都可以使用。 我为每
4回复

TextView setText和setVisibility在片段中不起作用

我有3个子片段的ControllerFragment 。 通过ViewPager在tabLayout中提供子片段更改。 未发送的Apple和Banana徽章计数是可计算的变量值。 根据这些变量值更改unSendAppleCountTxtView和unSendBananaCountTxtVi
1回复

onProgressUpdate执行

我正在练习AsyncTask的工作,因此我想使用onProgressUpdate函数。 当前在我的程序中,我有一个UI,可以让用户选择一个输入(将在AsyncTask完成后显示在TextView )和一个计时器(确定AsyncTask中的Thread.sleep()时间)。 我想做的是.