我知道这很可能会被标记为重复,但这让我非常沮丧。我一生都无法找到从 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/