由于AsyncTask是一个单独的类,如何将OnPostExecute()的结果获取到主要活动中?

由于AsyncTask是一个单独的类,如何将OnPostExecute()的结果获取到主要活动中?,第1张

由于AsyncTask是一个单独的类,如何将OnPostExecute()的结果获取到主要活动中?

简单:

创建interface类,其中

class String output
是可选的,或者可以是您想要返回的任何变量。

public interface AsyncResponse {    void processFinish(String output);}

转到您的AsyncTask课程,并将interface声明AsyncResponse为字段

public class MyAsyncTask extends AsyncTask<Void, Void, String> {  public AsyncResponse delegate = null;    @Override    protected void onPostExecute(String result) {      delegate.processFinish(result);    } }

在您的主要活动中,需要进行implements交互AsyncResponse。

public class MainActivity implements AsyncResponse{  MyAsyncTask asyncTask =new MyAsyncTask();  @Override  public void onCreate(Bundle savedInstanceState) {     //this to set delegate/listener back to this class     asyncTask.delegate = this;     //execute the async task      asyncTask.execute();  }  //this override the implemented method from asyncTask  @Override  void processFinish(String output){     //Here you will receive the result fired from async class      //of onPostExecute(result) method.   } }

更新

我不知道这是你们中许多人的最爱。因此,这是使用简单便捷的方式

interface

仍然使用相同的

interface
。仅供参考,您可以将其合并为
AsyncTask
类。

AsyncTask
课堂上:

public class MyAsyncTask extends AsyncTask<Void, Void, String> {  // you may separate this or combined to caller class.  public interface AsyncResponse {        void processFinish(String output);  }  public AsyncResponse delegate = null;    public MyAsyncTask(AsyncResponse delegate){        this.delegate = delegate;    }    @Override    protected void onPostExecute(String result) {      delegate.processFinish(result);    }}

在你的

Activity
课上做

public class MainActivity extends Activity {   MyAsyncTask asyncTask = new MyAsyncTask(new AsyncResponse(){     @Override     void processFinish(String output){     //Here you will receive the result fired from async class      //of onPostExecute(result) method.     }  }).execute(); }

或者,再次在Activity上实现接口

public class MainActivity extends Activity     implements AsyncResponse{    @Override    public void onCreate(Bundle savedInstanceState) {        //execute the async task         new MyAsyncTask(this).execute();    }    //this override the implemented method from AsyncResponse    @Override    void processFinish(String output){        //Here you will receive the result fired from async class         //of onPostExecute(result) method.    }}

如您所见,上面有2个解决方案,第一个和第三个,它需要创建method processFinish,另一个,该方法在调用者参数内部。第三个更整洁,因为没有嵌套的匿名类。希望这可以帮助

提示:变化

String output
String response
以及
String result
不同的匹配类型,以获得不同的对象。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4891767.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存