Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何为请求设置标记并从响应截击异步请求中获取它?_Android_Android Fragments_Android Intent_Android Volley_Android Internet - Fatal编程技术网

Android 如何为请求设置标记并从响应截击异步请求中获取它?

Android 如何为请求设置标记并从响应截击异步请求中获取它?,android,android-fragments,android-intent,android-volley,android-internet,Android,Android Fragments,Android Intent,Android Volley,Android Internet,我有一个带有多个RESTAPI的Android应用程序。API使用Volley库进行管理。反应很好,很好。但是当我发出异步请求时,我无法识别每个请求的响应 我的请求方法如下: private void httpCall(String URL, String json, String session key, int type) { try { SSLContext sslcontext = SSLContext.getInstance("TLSv1");

我有一个带有多个RESTAPI的Android应用程序。API使用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。

分配给请求的标记存储到变量mTag,该变量在请求的整个生命周期中保持不变

public Request<?> setTag(Object tag) {
    mTag = tag;
    return this;
}
在类Response中,将对象标记添加到接口侦听器中定义的回调函数onResponse

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

我不确定你想用标签做什么,但是你在哪里实现onResponse方法呢?我修改了我的问题。请求和响应方法在同一个类中,我想在请求中设置一个标记/键,并在响应中触发相同的方法。触发相同的方法??volley中的标记用于引用请求对象。请求已在响应方法上完成。你现在想用它做什么?请检查场景:我一次传递多个请求。请求是不同的Api。那么我如何将每个请求和响应分开呢?或者有其他的方法吗?在我的应用程序中,我将其用作一个泛化类。因此,所有请求都是从这里处理的。一次只能将一个请求添加到请求队列中,因此不会一次传递多个请求。您关心来自回调的数据,这是异步的。如果您需要一个请求的结果来执行另一个请求,那么您可以在第一个请求的onResponse中创建第二个请求。对于错误响应,可以采用相同的过程,方法是根据onErrorResponse(ObjectmTag,VolleyError error)修改接口ErrorListener方法您是否有类似的示例。@Chebyr如果您将其作为gradle依赖项而不是模块包含,该怎么办。附近有工作吗too@SagarDevanga您可以创建、扩展和实现自定义请求和响应类来添加标记。@Chebyr,太棒了。我完全忘了那条路线。很多。
/** Callback interface for delivering parsed responses. */
public interface Listener<T> {
    /** Called when a response is received. */
    public void onResponse(Object tag, T response);
}
@Override
protected void deliverResponse(T response) {
    mListener.onResponse(mTag, response);
}