Java 从AsyncTask设置TextView

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

我有一个名为SpotDetails的
活动,在
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
        }
    }

}