如何解决我收到 BasicNetwork.performRequest: Unexpected response code 400 using Volley
我收到以下错误:
E/Volley: [1252] BasicNetwork.performRequest: Unexpected response code 400 for https://xxx.xxxxxxxxxx.xxx/xxx/xxxxxx
和:
W/System.err: com.android.volley.ClientError
W/System.err: at com.android.volley.toolBox.BasicNetwork.performRequest(BasicNetwork.java:199)
W/System.err: at com.android.volley.Networkdispatcher.processRequest(Networkdispatcher.java:131)
W/System.err: at com.android.volley.Networkdispatcher.processRequest(Networkdispatcher.java:111)
W/System.err: at com.android.volley.Networkdispatcher.run(Networkdispatcher.java:90)
当我运行此代码时:
private void post(Context context,String api,final WebAPIListener listener) {
String localUri = getUri(api).toString();
Log.d(TAG,"insert: localUrl=" + localUri);
RequestQueue queue = Volley.newRequestQueue(context);
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST,localUri,postData,new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG,"onResponse: ");
if (listener != null)
listener.onReturn(response);
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG,"post.onErrorResponse: " + error.getMessage() );
Iterator<String> keys = postData.keys();
while (keys.hasNext()) {
String key = keys.next();
try {
Log.d(TAG,"onErrorResponse: " + key + "=" + postData.get(key).toString());
} catch (JSONException e) {
}
}
if (error instanceof NoConnectionError) {
Log.d(TAG,"onErrorResponse: NoConnectionError");
} else if (error instanceof NetworkError) {
Log.d(TAG,"post.onErrorResponse: NetworkError");
} else if (error.getCause() instanceof MalformedURLException) {
Log.d(TAG,"onErrorResponse: MalformedURLException");
} else if (error instanceof ParseError) {
Log.d(TAG,"onErrorResponse: ParseError");
} else if (error instanceof AuthFailureError) {
Log.d(TAG,"onErrorResponse: AuthFailureError");
} else if (error instanceof ClientError) {
Log.d(TAG,"onErrorResponse: ClientError");
} else if (error instanceof ServerError || error.getCause() instanceof ServerError) {
Log.d(TAG,"onErrorResponse: ServerError ");
} else if (error instanceof TimeoutError) {
Log.d(TAG,"onErrorResponse: TimeoutError");
}
error.printstacktrace();
if (listener != null)
listener.onError(error);
}
}) {
//here is where we pass the access tokens
@Override
public Map<String,String> getHeaders() throws AuthFailureError {
return getGlobalHeaders();
}
};
queue.add(request);
}
private Map<String,String> getGlobalHeaders() {
Log.d(TAG,"getGlobalHeaders: " + HEADER_AUTHORIZATION + "=Bearer " + accesstoken);
Log.d(TAG,"getGlobalHeaders: " + HEADER_DEVICE + "=" + appInstanceGuid);
Map<String,String> headers = new HashMap<>();
headers.put(WebAPI.HEADER_AUTHORIZATION,"Bearer " + accesstoken);
headers.put(WebAPI.HEADER_DEVICE,appInstanceGuid);
return headers;
}
当我获取 URI 和标头并在 Postman 中运行它们时,它们会按需要运行。我关注了 this one 等其他主题并尝试添加:
@Override
public String getBodyContentType() {
return "application/json; charset=utf-8";
}
喜欢this one:
headers.put("Content-Type","application/json; charset=utf-8");
或
headers.put("Content-Type","application/json");
就像 Postman 的情况一样,但我似乎无法摆脱此错误或从错误中获取有关它的更多信息。我看到 Postman 请求击中了 Web API(发布时应用程序调试日志),但 Android 应用程序不会发生这种情况。这真的很令人困惑。在某一时刻,代码正在运行。我知道,“发生了什么变化?”,另一个区域发生了很多变化,当我重置 adb 应用程序和数据时,这停止工作。
很难从 Volley 获得关于这些类型错误的反馈。看起来像是标题,但我直接从日志中提取它们并将它们放入 Postman,它们工作正常。
更新
Log.d(TAG,"onErrorResponse: statusCode=" + error.networkResponse.statusCode);
for(Header header : error.networkResponse.allHeaders) {
Log.d(TAG,"onErrorResponse: headers: " + header.getName() + "=" + header.getValue());
}
这突然出现:
onErrorResponse: headers: Content-Type=application/problem+json; charset=utf-8
所以我将继续使用 Content-Type 字段,看看这是否是问题所在。嵌入其中的“问题”似乎表明此标题是挑战。
还注意到,我将这些打印到 Logcat 的顺序将是第一个,因此错误既是 ServerError 又是 ClientError 的实例,或者至少这是我的解释。并不是说这是相关的,但我试图获得有关错误的更多详细信息,以便我将来可以识别并管理它。
} else if (error instanceof ServerError ) {
Log.d(TAG,"onErrorResponse: ServerError ");
} else if (error instanceof ClientError) {
Log.d(TAG,"onErrorResponse: ClientError");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。