Java 从AsyncTask设置TextView
我有一个名为SpotDetails的Java 从AsyncTask设置TextView,java,android,android-asynctask,Java,Android,Android Asynctask,我有一个名为SpotDetails的活动,在onCreate中,我在另一个活动中启动一个AsyncTask。然后AsyncTask下载并解析xml文件,结果应输出到SpotDetails活动中的TextView 我如何做到这一点? 来自主类的代码段(SpotDetails): 来自AsyncTask(DomXMLParser.java)的代码片段: -----来自onPostExecute tv.setText(yrMeasurmentList.get(0).getWindDirection
活动,在onCreate
中,我在另一个活动中启动一个AsyncTask
。然后AsyncTask
下载并解析xml
文件,结果应输出到SpotDetails活动中的TextView
我如何做到这一点?
来自主类的代码段(SpotDetails):
来自AsyncTask
(DomXMLParser.java)的代码片段:
-----来自onPostExecute
tv.setText(yrMeasurmentList.get(0).getWindDirection_degree());
例外情况:
(StackOwerflow将我的异常识别为代码。)不要将您的异步任务
放入另一个活动中。如果您在不同的地方使用了AsyncTask
s,您可以将它们放在实用程序类中,也可以在它们自己的文件中声明它们。如果您有一个只修改一个活动的UI的AsyncTask
,则应该在该活动中声明它。如果多个活动使用了AsyncTask
,则可以在构造函数中传递活动
,将其存储为私有字段,并解析onPostExecute()
中的视图:
类MyAsyncTask扩展了AsyncTask。。。{
弱引用性;
公共MyAsyncTask(活动){
超级();
mActivity=新的WeakReference(活动);
}
...
PostExecute上的公共void(…){
Activity act=mActivity.get();
if(act!=null){
TextView tv=act.findViewById(…id…);
tv.setText(“你好世界”);
}否则{
//活动被破坏了
}
}
}
注意:我在那里使用了一个WeakReference,这将有助于缓解长时间运行的异步任务的大多数问题。在进入doinbackground()之前,将textview设置为null,这与将onPreExecute中的textview设置为null不一样吗?似乎也不起作用:(谢谢,我按照你在代码中说的那样做了,它工作得很好。截至你的评论,我已经按照你说的那样做了:)
TextView tv;
@Override
protected void onPreExecute() {
super.onPreExecute();
tv = (TextView) spotDetails.findViewById(R.id.spot_overview_WindDegreesForeCastFromYRinfo);
// Create a progressbar
tv.setText(yrMeasurmentList.get(0).getWindDirection_degree());
class MyAsyncTask extends AsyncTask... {
WeakReference<Activity> mActivity;
public MyAsyncTask( Activity activity ) {
super();
mActivity = new WeakReference<Activity>( activity );
}
...
public void onPostExecute(...) {
Activity act = mActivity.get();
if( act != null ) {
TextView tv = act.findViewById( ...id... );
tv.setText( "Hello World" );
} else {
// the Activity was destroyed
}
}
}