Android 如何为请求设置标记并从响应截击异步请求中获取它?
我有一个带有多个RESTAPI的Android应用程序。API使用Volley库进行管理。反应很好,很好。但是当我发出异步请求时,我无法识别每个请求的响应 我的请求方法如下: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");
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);
}