在AsyncTask中获取TextView - Android

时间:2016-07-22 16:13:04

标签: android android-asynctask

我想在textView中发布我的AsyncTask(一个字符串)的结果。

这是我的主要内容:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ReadRss readRss=new ReadRss(this);
    readRss.execute();
    ......
}

这是我的AsyncTask:

public class ReadRss extends AsyncTask<Void,Void,Void> {

public ReadRss(Context context){
}

@Override
protected void onPreExecute() {
}

@Override
protected void onPostExecute(Void aVoid) {
}

@Override
protected Void doInBackground(Void... params) {
    ProcessXml();
    return null;
}

private void ProcessXml() {
    //HERE CREATE MY STRING
    String myresult="example";

    TextView txt_ris = (TextView)findViewById(R.id.txt_ris);  <---HOW CAN I DO THIS?
    txt_ris.setText(myresult);   

            }

        }
    }
}

FindViewById不能在AsyncTask中工作,那么如何在这里获取TextView? 也许我可以把它作为AsyncTask中的一个寄生者传递,语法是什么?

2 个答案:

答案 0 :(得分:2)

您需要在b779方法中放置UI工作,因为doInBackground在非UI线程中执行

onPostExecute

答案 1 :(得分:1)

为了正确引用TextView,您需要一个上下文,并且您已经在AsyncTask构造函数中引用了启动Activity,因此您可以执行以下操作:

public class ReadRss extends AsyncTask<Void,Void,Void> {

     private TextView tv;
     private YourStartingActivity activity;

     public ReadRss(Context context){
         activity = (YourStartingActivity)context;
         tv = (TextView)activity.findViewById(R.id.txt_ris)
     }

     @Override
     protected void onPreExecute() {
         ...
     }

     @Override
     protected void onPostExecute(Void aVoid) {
         (follow Michael Spitsin instructions here)
     }

     @Override
     protected Void doInBackground(Void... params) {
         ...
     }
}