java - 无法从 AsyncTask 更新 UI

标签 java android android-asynctask

我知道这很可能会被标记为重复,但这让我非常沮丧。我一生都无法找到从 AsyncTask 修改 TextView 的方法。这是我在 MainActivity 类中的函数:

public void updateTextView(String data){
    TextView textview = (TextView)findViewById(R.id.TextView1);
    textview.setText(data);
}

然后在我的 AsyncTask 中我有

@Override
protected void onPostExecute(String result) {
    MainActivity ma = new MainActivity();
    ma.updateTextView(result);
}

但是,在运行此代码以及涉及尝试从 AsyncTask 修改 TextView 的任何修改之后,我得到:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.view.Window$Callback android.view.Window.getCallback()”

但是,当从主线程调用相同的函数时,它运行良好。

任何帮助将不胜感激。

最佳答案

您不能从 Activity 创建新对象并使用它。尝试获取对 Activity 的引用

将此代码添加到您的 AsyncTask 类

MainActivity activity;

public void setContext(MainActivity activity){
    this.activity = activity;
  }

也编辑此内容

@Override
protected void onPostExecute(String result) {
     activity.updateTextView(result);
   }

在 Activity 中创建 AsyncTask 对象时调用此方法

//at is the object you created from your AsyncTask Class
at.setContext(this);

关于java - 无法从 AsyncTask 更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42749613/

相关文章:

java - 即使我使用异步线程,主线程也会做太多工作(UI 滞后)

Java Scanner 获取输入,调用方法,然后返回读取更多输入不起作用

android.database.sqlite.SQLiteException : no such table: TableName

javascript - 在 android kitkat 中调用 javascript 函数

android - 构建文件夹未在 android studio 项目中生成

java - 异步任务致命异常 - 线程正在退出,但未捕获异常

android - 改造和集中错误处理

java - 是否有必要在 java 函数中为时间创建两个日历实例?

java - Liquibase交易界定

javascript - Tapestry:重新加载页面清空页面内容