【问题标题】:OnProgressUpdate cant SetText in TextViewOnProgressUpdate 无法在 TextView 中设置文本
【发布时间】:2020-03-01 18:45:56
【问题描述】:
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:1112) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 在 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.View.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.pcartistofficial.pingtesterforgames.MainActivity$BackgroundTasker.doInBackground(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:1112) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 在 java.lang.Thread.run(Thread.java:818)

【问题讨论】:

  • 错误提示“只有创建视图层次结构的原始线程才能触及其视图”。这意味着您正在尝试从非 ui 线程访问视图,可能在 doInBackground 方法中
  • @Emil 但它在 Android Oreo + 上运行良好。使用相同的确切代码。
  • 顺便说一句,发出命令是从 doInBackground() 调用的 onProgressUpdate(2) 。我如何修改,使其也适用于以前的版本
  • 最好也放你的doinbackground方法代码。因为它只显示该方法中的错误。

标签: android android-asynctask


【解决方案1】:

我假设您直接在 doInBackground 方法中调用此方法会导致此异常。 相反,尝试在调用 onProgressUpdate 方法的 doInBackground 方法中调用 publishProgress({your values})

Reference to AsyncTask API documentation

【讨论】:

    猜你喜欢
    • 2020-07-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 2021-11-07
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    相关资源
    最近更新 更多