【发布时间】:2013-01-19 22:10:21
【问题描述】:
我想在我的AsyncTask 的onPostExecute 之后调用Activity 方法。
你知道我该怎么做吗?
我想在onPostExecute中调用sendSMS(String phoneNumber, String message)方法。
【问题讨论】:
标签: android android-asynctask android-activity
我想在我的AsyncTask 的onPostExecute 之后调用Activity 方法。
你知道我该怎么做吗?
我想在onPostExecute中调用sendSMS(String phoneNumber, String message)方法。
【问题讨论】:
标签: android android-asynctask android-activity
一种方法是通过PostTask 构造函数传递Activity 的实例,类似于:
private class PostTask extends AsyncTask<String, Integer, String>
{
private AsyncBigCalculActivity activity;
public PostTask(AsyncBigCalculActivity activity)
{
this.activity = activity;
}
// ...
}
在创建PostTask 实例时,传递活动实例:
new PostTask(this).execute();
现在您可以在PostTask 中调用sendSMS(),例如:
activty.sendSMS(...);
还请注意,如果您将PostTask 定义为活动内部的私有类,那么您可以调用sendSMS(),例如:
AsyncBigCalculActivity.this.sendSMS(...);
【讨论】:
像这样向你的 AsyncTask 添加一个构造函数和一个全局变量:
AsyncBigCalculActivity mActivity;
public PostTask(AsyncBigCalculActivity a) {
mActivity = a;
}
然后在需要时只需使用mActivity.sendSMS("test", "test")。
但是,您确实应该在实用程序类中拥有像 sendSMS() 这样的方法。
【讨论】:
如果您的AsyncTask 是您的Activity 的内部类,那么您应该能够从您的onPostExecute() 调用Activity 方法。否则,您可以将Context 发送给AsyncTask 的构造函数并使用它来调用方法
【讨论】:
您可以使用接口创建回调。这样您就可以在任何活动中使用您的AsyncTask。 (松耦合代码)
1) 创建回调
interface MyAsyncTaskCallBack{
public void doStuff(String arg1,String arg2);
}
2) 在 AsyncTask 中初始化回调
private class MyTask extends AsyncTask<String, Void, Void>
{
private MyAsyncTaskCallBackactivity callback;
public MyTask(MyAsyncTaskCallBackactivity callback)
{
this.callback = callback;
}
//Call callback.doStuff(....phonenum, ....message); in your postExecute
}
3) 在您的 Activity 中实现回调并覆盖 doStuff() 方法
public YourActivity extends AppCompatActivity implements MyAsyncTaskCallBack{
// Your Activity code
// new MyTask(this).execute("phonenum","msg"); //<--- This is how you run AsyncTask
private void sendMessage(String num, String msg){
// send msg logic
}
@Override
public void doStuff(String arg1,String arg2){
sendMessage(arg1,arg2); // invoke activity method
}
}
【讨论】: