2017-11-03 5 views
0

説明: 私は全体の状況をここで説明しようとしています。私は別のクラスに属しているAPI呼び出しを持っています(アクティビティやフラグメントには関係ありません)。そのクラスのオブジェクトを使ってAPI呼び出しメソッドを呼び出そうとしています。その時点で、APIレスポンスが正常に完了しなくなるまで待たなければなりません。この回答に基づいて、私は同じクラスに住んでいるもう一つのAPIが必要です。APIの応答が正常に完了しなくなるまで、実行フローを停止するにはどうすればよいですか?

問題:

私はAPIを呼び出すためにAsyncHttpClientライブラリを使用しています。これは、非同期メソドロジで使用されます。私がAPI呼び出しをアクティビティ内に置くか、呼び出し側の残りの部分が実行しようとしています。 APIが正常に応答するまで待ってから、コードの残りの行を実行したいと考えています。

質問:

このような状況から克服する必要があるのは何ですか。私は、実装戦略が異なるため、APIコールをアクティビティやフラグメントに入れません。

この問題を解決するのを手伝ってください。

+0

あなたのAPIは、応答を取得するまで、それは保持されますので、あなたは、活動にごAPIクラスからインターフェースのコールバックを使用することができます –

答えて

0

HIIミラノ、私は私があなたの問題が、このライブラリによって解決されるだろうと思いAsyncHttpClient

その後、良くなるプロジェクトにhttps://github.com/koush/ion ライブラリを使用することをお勧めします。

事前残りの利用をしたいならば、あなたはこのような場合にはインタフェースを使用することができますretrofitライブラリ

0

を使用します。

  1. 方法

onSuccess(String responseData) と とのインタフェースを作成します。 onError(String errorData)

  1. アクティビティまたはフラグメントにインターフェイスを実装します。インターフェイスのonSuccess(String responseData)メソッド内でAPIの成功後に実行するコードを追加します。 onError(String errorData)も同様に扱います。

  2. APIクラスのオブジェクトを作成する際に、実装されたインターフェイスの参照を渡して、APIクラスが結果のインターフェイスメソッドを呼び出せるようにします。

また、あなたは、改修のようなAPIを備えたこの種の仕事のために任意のサードパーティのライブラリを使用することができ、ボレーなど

私はこれがあなたのお役に立てば幸いです。

0

インターフェイスを使用します。これにより、onSuccessまたはonFailureからメソッドを呼び出すことができる独自のコールバックを作成できます。

public interface OnJSONResponseCallback { 
    public void onJSONResponse(boolean success, JSONObject response); 
} 



public JSONObject getJSONObj(OnJSONResponseCallback callback) { 
    ... 
    @Override 
    public void onSuccess(int i, Header[] headers, String response) { 
     try { 
      jObj = new JSONObject(response); 
      callback.onJSONResponse(true, jObj); 
     } catch (JSONException e) { 
      Log.e("Exception", "JSONException " + e.toString()); 
     } 
    } 

    @Override 
    public void onFailure(int statusCode, Header[] headers, String response, Throwable e) { 
     try { 
      jObj = new JSONObject(response); 
      callback.onJSONResponse(false, jObj); 
     } catch (JSONException e) { 
      Log.e("Exception", "JSONException " + e.toString()); 
     } 
    } 
} 

そして、それを呼び出す:

jsonParse.getJSONObj(new OnJSONResponseCallback(){ 
    @Override 
    public void onJSONResponse(boolean success, JSONObject response){ 
     //do something with the JSON 
    } 
}); 
関連する問題