1

我想ActivityonPostExecute我的AsyncTask. 你知道我该怎么做吗?

我想sendSMS(String phoneNumber, String message)onPostExecute.

4

4 回答 4

4

一种方法是传递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(...);
于 2013-01-19T22:15:20.600 回答
1

像这样向你的 AsyncTask 添加一个构造函数和一个全局变量:

AsyncBigCalculActivity mActivity;

public PostTask(AsyncBigCalculActivity a) {
    mActivity = a;
}

然后只需mActivity.sendSMS("test", "test")在需要时使用。

但是,您确实应该拥有sendSMS()实用程序类中的方法。

于 2013-01-19T22:14:08.777 回答
1

如果你AsyncTask是你的内部类,Activity那么你应该能够Activity从你的onPostExecute(). 否则,您可以将 发送Context到您的构造函数AsyncTask并使用它来调用方法

于 2013-01-19T22:14:39.060 回答
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)在您的活动中实现回调并覆盖 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
     }

} 
于 2019-02-06T15:38:54.710 回答