从BackgroundWorker onPostExecute将结果返回到Main

时间:2017-11-07 15:23:07

标签: android

很抱歉这个问题,但我最近开始开发android和Java新手。

目前,我能够" Toast" onPostExecute导致" BackgroundWorkerLocation.java"。我需要的是以某种方式将这些结果传递给" MainActivty.java"从我执行这个类的地方。

MainActivity.java

    String type = "get_location";
    String tLatitude = String.valueOf(latitude);
    String tLongitude = String.valueOf(longitude);
    BackgroundWorkerLocation backgroundWorkerLocation = new BackgroundWorkerLocation(getApplicationContext());
    backgroundWorkerLocation.execute(type, tLatitude, tLongitude);

    // I need "Results" here

BackgroundWorkerLocation.java

public class BackgroundWorkerLocation extends AsyncTask<String,Void,String> {

Context context;

BackgroundWorkerLocation(Context ctx){
    context = ctx;
}

@Override
protected String doInBackground(String... params) {
    // Some background work
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
}

@Override
protected void onPostExecute(String result) {
    super.onPostExecute(result);
    // Currently I am able to Toast "RESULT" here
}

@Override
protected void onProgressUpdate(Void... values) {
    super.onProgressUpdate(values);
}
}

1 个答案:

答案 0 :(得分:2)

您需要创建一个可用作回调的界面:

 interface MyCallback {
      void onResult(String result);
 }

在您的活动中,您将创建此回调的匿名实现。 将它传递给您的ASyncTask。

String type = "get_location";
String tLatitude = String.valueOf(latitude);
String tLongitude = String.valueOf(longitude);
BackgroundWorkerLocation backgroundWorkerLocation = new BackgroundWorkerLocation(getApplicationContext(), new MyCallback() {
 @Override
 public void onResult(String result) {
       // I need "Results" here
 }
});
backgroundWorkerLocation.execute(type, tLatitude, tLongitude);

当ASyncTask完成时,你调用&#34; onResult&#34;回调的方法。

public class BackgroundWorkerLocation extends AsyncTask<String,Void,String> {

Context context;
private final MyCallback myCallback;

BackgroundWorkerLocation(Context ctx, MyCallback myCallback){
    context = ctx;
    this.myCallback = myCallback;
}

@Override
protected String doInBackground(String... params) {
    // Some background work
}

@Override
protected void onPostExecute(String result) {
    super.onPostExecute(result);
    // Currently I am able to Toast "RESULT" here
    myCallback.onResult(result);
}

}

这是您在两个类之间共享数据的方法。

请注意,由于回调实现是匿名的,因此它具有对您的Activity的引用,因此如果您的任务比您的活动长,则可能导致内存泄漏。 (你的下一个问题: - ))