Android 如何从公共异步任务获取MainActivity文本视图?

Android 如何从公共异步任务获取MainActivity文本视图?,android,android-asynctask,Android,Android Asynctask,我有一个MainActivity和一个AsyncTask MyTask。他们是分开的班级。在MyTask中,我想更新MainActivity中的TextView 如果MyTask位于MainActivity的内部类中,这似乎很容易,因为我可以调用findViewById()。但现在这两个类是分开的 因此,在我的主要活动中,我会这样做: MyTask myTask=new MyTask(); Context context=this.getApplicationContext(); myTask.

我有一个MainActivity和一个AsyncTask MyTask。他们是分开的班级。在MyTask中,我想更新MainActivity中的TextView

如果MyTask位于MainActivity的内部类中,这似乎很容易,因为我可以调用findViewById()。但现在这两个类是分开的

因此,在我的主要活动中,我会这样做:

MyTask myTask=new MyTask();
Context context=this.getApplicationContext();
myTask.execute(context);
我的任务是这样的:

public class MyTask extends AsyncTask<Context, Void, Void>
{
    TextView mText;
    protected Void doInBackground(Context... params) {
        Context context=params[0];
        mText = (TextView) ((MainActivity)context).findViewById(R.id.text);
...
    }
}
公共类MyTask扩展了AsyncTask
{
文本视图多行文字;
受保护的Void doInBackground(上下文…参数){
上下文=参数[0];
mText=(TextView)((MainActivity)context.findViewById(R.id.text);
...
}
}
我知道“mText=(TextView)((MainActivity)context).findviewbyd(R.id.text);”是错误的,但我还没有找到解决方案

有什么提示吗


提前感谢

您可以这样做。如果任务不会持续很长时间,您可以忽略WeakReference:

public class MyTask extends AsyncTask<Void, Void, Void> {
  private WeakReference<MainActivity> mActivity;
  public MyTask(MainActivity activity) {
    mActivity = new WeakReference<MainActivity>(activity);
  }

  public void onPostExecute(Void result) {
    MainActivity activity = mActivity.get();
    if (activity != null) {
      TextView text = activity.findViewById(R.id.text);
    }
  }
}
公共类MyTask扩展了AsyncTask{
私人弱引用活动;
公共MyTask(主活动){
mActivity=新的WeakReference(活动);
}
PostExecute上的公共作废(作废结果){
MainActivity=mActivity.get();
if(活动!=null){
TextView text=activity.findviewbyd(R.id.text);
}
}
}

当我尝试查找文本视图时,会出现ClassCastException,因为您传递的是应用程序上下文而不是活动,所以您会得到ClassCastException。在您的示例中,替换“myTask.execute(context);”“我的任务。执行(这个);”我真的搜索了几个小时,直到我找到了这个,anwser的大事件!