我想在Activity
的{{1}}之后调用onPostExecute
方法。
你知道我怎么做吗?
我想调用AsyncTask
中的sendSMS(String phoneNumber, String message)
方法。
答案 0 :(得分:4)
一种方法是传递Activity
到PostTask
构造函数的实例,例如:
private class PostTask extends AsyncTask<String, Integer, String>
{
private AsyncBigCalculActivity activity;
public PostTask(AsyncBigCalculActivity activity)
{
this.activity = activity;
}
// ...
}
并在创建PostTask
实例时,传递活动实例:
new PostTask(this).execute();
现在,您可以在sendSMS()
内调用PostTask
,例如:
activty.sendSMS(...);
另请注意,如果您将PostTask
定义为activty中的私有类,则可以调用sendSMS()
,如:
AsyncBigCalculActivity.this.sendSMS(...);
答案 1 :(得分:1)
将构造函数和全局变量添加到AsyncTask中,如下所示:
AsyncBigCalculActivity mActivity;
public PostTask(AsyncBigCalculActivity a) {
mActivity = a;
}
然后在需要时使用mActivity.sendSMS("test", "test")
。
但是,实际应该在实用程序类中使用sendSMS()
等方法。
答案 2 :(得分:1)
如果您的AsyncTask
是Activity
的内部类,那么您应该可以从Activity
调用onPostExecute()
方法。否则,您可以将Context
发送到AsyncTask
的构造函数并使用它来调用方法
答案 3 :(得分:0)
您可以使用界面创建回叫。这样,您可以将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
}
}