1

私は複数のREST APIを備えたAndroidアプリケーションを持っています。 APIは、Volleyライブラリを使用して管理されます。応答が得て、それはうまく動作します。しかし、私が非同期要求を行うとき、私は各要求の応答を特定できません。リクエストにタグを設定してResponse Volleyの非同期リクエストから取得する方法は?

は、私のリクエストメソッドはこれです:

private void httpCall(String URL, String json, String session key, int type) { 
     try { 
      SSLContext sslcontext = SSLContext.getInstance("TLSv1"); 
      sslcontext.init(null, 
        null, 
        null); 
      SSLSocketFactory NoSSLv3Factory = new NoSSLv3SocketFactory(sslcontext.getSocketFactory()); 
      HttpsURLConnection.setDefaultSSLSocketFactory(NoSSLv3Factory); 

      Log.i(REQUEST_TAG, "httpCall=url" + url + "::type" + type); 
      Log.i(REQUEST_TAG, "httpCall=json" + json); 
     } catch (Exception e) { 
      e.printStackTrace(); 

     } 
     if (mContext != null) 
      mQueue = CustomVolleyRequestQueue.getInstance(mContext).getRequestQueue(); 
     else 
      mQueue = CustomVolleyRequestQueue.getInstance(mActivity).getRequestQueue(); 
     JSONObject mJSONObject; 
     final CustomJSONObjectRequest jsonRequest; 
     try { 
      if ((json != null) && (json.trim().length() > 0)) { 
       mJSONObject = new JSONObject(json); 
      } else { 
       mJSONObject = new JSONObject(); 
      } 
      jsonRequest = new CustomJSONObjectRequest(sessionkey, type, url, mJSONObject, this, this); 
      // Wait 20 seconds and don't retry more than once 
      jsonRequest.setRetryPolicy(new DefaultRetryPolicy(
        (int) TimeUnit.SECONDS.toMillis(20), 
        DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

      jsonRequest.setTag(REQUEST_TAG); 
      mQueue.add(jsonRequest); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

は、リクエストにタグを設定し、応答から同じを取得するための任意のオプションがあります?。私が現在の要求と応答を特定できるように。これは重複した質問ではありませんが、私はこれについて適切な説明を得ていませんでした。

私の回答方法は次のとおりです。

@Override 
    public void onResponse(Object response) { 
     if (response != null) { 

      // I want to trigger the request tag from here 

      mCallBack.onSuccessData(response); 
     } 
    } 

要求と応答の方法は、同じクラスとResponse.Listener、Response.ErrorListener実装クラスです。

+0

ように私はあなたがタグを使用しようとしているかわからないんだけど、、Response.Listenerインタフェースを実装するクラスで

/** Callback interface for delivering parsed responses. */ public interface Listener<T> { /** Called when a response is received. */ public void onResponse(Object tag, T response); } 

リスナーインタフェースで定義されていますどこでonResponseメソッドを実装しますか? –

+0

私の質問を変更します。リクエストとレスポンスのメソッドが同じクラスにあり、リクエストでタグ/キーを設定し、レスポンスで同じものをトリガーしたいと思います。 – Nithinjith

+0

同じ手段をトリガー?ボレーのタグはリクエストオブジェクトを参照するために使用されます。要求はすでに応答メソッドで完了しています。あなたは今それで何をしますか? –

答えて

2

リクエストに割り当てたタグは、変数mTagに保存されます。このタグは、リクエストのライフサイクル全体を通じて保持されます。追加し、クラスレスポンスで保護さ

/** An opaque token tagging this request; used for bulk cancellation. */ 
    protected Object mTag; 

に民間からのMTAGのクラス要求変更の可視性で

:私は少し、次のボレークラスを変更している私のアプリケーションでは

public Request<?> setTag(Object tag) { 
    mTag = tag; 
    return this; 
} 

オブジェクト・タグコールバック関数onResponseJsonRequest

@Override 
protected void deliverResponse(T response) { 
    mListener.onResponse(mTag, response); 
} 
+0

エラー応答には、onErrorResponse(ObjectmTag、VolleyErrorエラー)のようにInterface ErrorListenerメソッドを変更することで、同じ手順を採用することができます。 – Chebyr

+0

同じ例をお持ちですか? –

+0

@Chebyrモジュールとしてではなく、それをgradle依存関係に含めるとどうなりますか? @Sagar Devangaを作成してカスタムのRequestクラスとResponseクラスを拡張し実装して、タグ付けを追加することもできます。 –

関連する問題