7

サーバーを呼び出して DB からデータを取得する非同期タスクを作成しました。
http サーバー呼び出しから返された結果を処理する必要があります。
私の活動から、多くの場所で非同期タスクを呼び出しています。そのため、メンバー変数を使用して結果にアクセスすることはできません。何か方法はありますか?

public Result CallServer(String params)
{

    try
    {
    new MainAynscTask().execute(params);
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }
    return aResultM;//Need to get back the result

}  

    private class MainAynscTask extends AsyncTask<String, Void, Result> {


    @Override
    protected Result doInBackground(String... ParamsP) {    
        //calling server codes
        return aResultL;
    }       
    @Override
       protected void onPostExecute(Result result) {
          super.onPostExecute(result);
          //how i will pass this result where i called this task?
       }
4

4 に答える 4

3

私が提案できる2つの方法があります-

  1. onPostExecute(Result)AsyncTaskhttp://developer.android.com/reference/android/os/AsyncTask.html#onPostExecute(Result)を参照してください。

  2. 結果をおまけとしてブロードキャストを送信します。

AsyncTaskは非同期タスクであるため、呼び出し元に結果を返すことは意味がありません。むしろonPostExecute()、値をTextViewetc に設定するように結果を処理します。または、ブロードキャストを送信して、他のリスナーが結果を処理できるようにします。

于 2013-04-01T07:52:23.777 に答える
1

これを回避する方法は次のとおりです。

1) 完了時に実行するメソッドのシグネチャを定義するインターフェイス クラスを作成します。

public interface AsyncIfc {
    public void onComplete();
}

2) AsyncTask クラスにプロパティを設定して、デリゲート メソッドを保持します。

    public AsyncIfc completionCode;

3) AsyncTask で onPostExecute() からデリゲートをトリガーします。

completionCode.onComplete();

4) 呼び出しロジックから、デリゲート プロパティを匿名メソッドに設定します。

task.completionCode = new AsyncIfc() {

    @Override
    public void onComplete() {
    // Any logic you want to happen after execution
    }
};
于 2013-10-16T04:18:10.960 に答える