我想Activity在onPostExecute我的AsyncTask. 你知道我该怎么做吗?
我想sendSMS(String phoneNumber, String message)在onPostExecute.
我想Activity在onPostExecute我的AsyncTask. 你知道我该怎么做吗?
我想sendSMS(String phoneNumber, String message)在onPostExecute.
一种方法是传递ActivitythroughPostTask构造函数的实例,例如:
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(...);
像这样向你的 AsyncTask 添加一个构造函数和一个全局变量:
AsyncBigCalculActivity mActivity;
public PostTask(AsyncBigCalculActivity a) {
mActivity = a;
}
然后只需mActivity.sendSMS("test", "test")在需要时使用。
但是,您确实应该拥有sendSMS()实用程序类中的方法。
如果你AsyncTask是你的内部类,Activity那么你应该能够Activity从你的onPostExecute(). 否则,您可以将 发送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)在您的活动中实现回调并覆盖 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
}
}