【问题标题】:Cannot update UI from AsyncTask无法从 AsyncTask 更新 UI
【发布时间】:2017-08-02 15:23:54
【问题描述】:

我知道这很可能会被标记为重复,但这让我非常沮丧。在我的一生中,我无法找到一种从 AsyncTask 修改文本视图的方法。这是我在 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()'

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

任何帮助将不胜感激。

【问题讨论】:

标签: java android android-asynctask


【解决方案1】:

你不能从一个活动中创建一个新对象并使用它。尝试获取对活动的引用

将此代码添加到您的 AsyncTask 类中

MainActivity activity;

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

也编辑这个

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

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

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

【讨论】:

  • 效果很好!谢谢!
  • 你不必使用 runOnUiThread 之类的东西。 AsyncTask 中的 OnPostExecute 已在 UI 线程上调用。
猜你喜欢
  • 2021-04-04
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多