2017-11-07 55 views
0

申し訳ありませんが、私は最近アンドロイドとJavaの開発を始めました。結果をメインに戻すBackgroundWorker onPostExecute

現在、私は "BackgroundWorkerLocation.java"でonPostExecuteの結果を "Toast"することができます。私が必要とするのは、どういうわけか、このクラスを実行する場所から "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

​​
+1

インターフェイスを作成して、「ICallBack」と言うことができます。ここでメソッド 'onComplete'を定義します。あなたの 'MainActivity.java'にこれを実装します。これは、サービスが完了した後のコールバックメソッドになります。あなたがサービスを呼び出すとき、あなたのサービスで 'MainActivity.java'のインスタンスを渡してください。 'OnPostExecute'では、mainのonCompleteメソッドを呼び出します。 LocalBroadCastManagerでこれを実現することもできます。 – Jimmy

答えて

2

あなたがコールバックとして使用できるインターフェイスを作成する必要があります:あなたの活動では

interface MyCallback { 
     void onResult(String result); 
} 

をこのコールバックの匿名実装を作成します。 ASyncTaskに渡します。

​​

ASyncTaskが完了すると、コールバックの「onResult」メソッドを呼び出します。

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); 
} 

} 

これは、2つのクラス間でデータを共有する方法です。

コールバックの実装は匿名であるため、アクティビティへの参照が含まれているため、タスクがアクティビティより長く存続するとメモリリークが発生する可能性があります。 (あなたの次の問題:-))

+0

ありがとうございます。あなたは救い主です。 – Sebastian

関連する問題