【发布时间】:2016-03-21 09:59:18
【问题描述】:
我有一个带有多个 REST Api 的 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。
【问题讨论】:
-
我不确定您要使用标签做什么,但是您在哪里实现 onResponse 方法?
-
我修改了我的问题。请求和响应方法在同一个类中,我想在请求中设置一个标签/键并在响应上触发相同的。
-
触发方式相同?? volley 中的标签用于引用请求对象。该请求已在响应方法上完成。你现在想用它做什么?
-
请检查场景:我一次传递多个请求。请求是不同的 Api。那么我怎样才能分离每个请求和响应呢?或者有什么替代方法吗?我在我的应用程序中将其用作通用类。所以所有的请求都是从这里处理的。
-
您一次只能将一个请求添加到请求队列中,因此您不会一次传递多个。您关心来自异步回调的数据。如果您需要一个请求的结果来执行另一个请求,那么您在第一个的 onResponse 中创建第二个请求
标签: android android-fragments android-intent android-volley android-internet