Java 无法从异步任务更新UI
我知道这很可能会被标记为重复,但这让我非常沮丧。在我的一生中,我无法找到从异步任务修改textview的方法。这是我在MainActivity类中的函数:Java 无法从异步任务更新UI,java,android,android-asynctask,Java,Android,Android Asynctask,我知道这很可能会被标记为重复,但这让我非常沮丧。在我的一生中,我无法找到从异步任务修改textview的方法。这是我在MainActivity类中的函数: public void updateTextView(String data){ TextView textview = (TextView)findViewById(R.id.TextView1); textview.setText(data); } 然后在我的任务中 @Override protected void on
public void updateTextView(String data){
TextView textview = (TextView)findViewById(R.id.TextView1);
textview.setText(data);
}
然后在我的任务中
@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()”
但是,当从主线程调用相同的函数时,它运行良好
任何帮助都将不胜感激。您不能从活动中创建新对象并使用它。尝试获取活动的引用 将此代码添加到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);
你不能从一个活动中创建一个新对象并使用它。尝试获取活动的引用 将此代码添加到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);
MainActivity ma=新的MainActivity()
???您正在尝试创建一个新活动?可能重复的不创建MainActivity的新实例!而是在创建AsyncTask时将实例作为参数传递,并使用它调用该方法。切勿对任何活动类调用new
。你只是在问这个问题。比如MainActivity ma=newmainActivity()
???您正在尝试创建一个新活动?可能重复的不创建MainActivity的新实例!而是在创建AsyncTask时将实例作为参数传递,并使用它调用该方法。切勿对任何活动类调用new
。你只是在问这个问题,喜欢很好!谢谢你不必使用runOnUiThread之类的东西。已经在UI线程上调用了AsyncTask中的OnPostExecute。非常好!谢谢你不必使用runOnUiThread之类的东西。已在UI线程上调用AsyncTask中的OnPostExecute。