我想Activity
在onPostExecute
我的AsyncTask
. 你知道我该怎么做吗?
我想sendSMS(String phoneNumber, String message)
在onPostExecute
.
我想Activity
在onPostExecute
我的AsyncTask
. 你知道我该怎么做吗?
我想sendSMS(String phoneNumber, String message)
在onPostExecute
.
一种方法是传递Activity
throughPostTask
构造函数的实例,例如:
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
}
}