【发布时间】:2020-03-29 11:08:12
【问题描述】:
我目前在一个项目中使用 volley,我想发送一个 JSON 正文 并检索一个 String 作为响应。
为此,我创建了一个以 JsonRequest 作为父级的类。
看起来像这样:
public class JAStringRequest extends JsonRequest<String> {
private String token;
private Response.Listener<String> listener;
@Nullable
private Response.ErrorListener errorListener;
public JAStringRequest(String token, int method, String url, @Nullable String requestBody, Response.Listener<String> listener, @Nullable Response.ErrorListener errorListener) {
super(method, url, requestBody, listener, errorListener);
this.token = token;
this.listener = listener;
this.errorListener = errorListener;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
try {
HashMap<String, String> headers = new HashMap<>();
String auth = "Bearer " + token;
headers.put("Authorization", auth);
headers.put("Content-Type", "application/json");
return headers;
} catch (Exception e) {
Log.e(TAG, "Authentication Failure");
}
return super.getHeaders();
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
Log.d(TAG, "parseNetworkResponse " + response.statusCode);
try {
String jsonString =
new String(
response.data,
HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET));
return Response.success(
jsonString, HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
}
}
@Override
protected void deliverResponse(String response) {
super.deliverResponse(response);
Log.d(TAG, "deliverResponse: " + response);
listener.onResponse(response);
}
@Override
protected VolleyError parseNetworkError(VolleyError volleyError) {
Log.d(TAG, "parseNetworkError");
if (volleyError.networkResponse != null
&& volleyError.networkResponse.data != null) {
volleyError = new VolleyError(new String(
volleyError.networkResponse.data));
return volleyError;
}
return null;
}
}
问题是我从来没有从 parseNetworkResponse 中检索到响应。 (日志“parseNetworkResponse 200”)
JAStringRequest request = new JAStringRequest(jwtToken, Request.Method.POST, url.toString(), array.toString(),
response -> {
if (response.equals("200")) {
Log.d(TAG, "DBrequest result: " + key + " => " + response);
} else {
Log.d(TAG, "DBrequest error: " + key + " => " + response);
}
isRequestEnded.set(true);
},
error -> {
Log.d(TAG, "DBrequest Error message: " + key + " => " + error.getMessage());
});
request.setTag(key);
queue.add(request);
这里永远不会触发监听器,日志不会显示。
有什么线索吗?
谢谢!
【问题讨论】:
标签: android json api web-services android-volley