我收到 BasicNetwork.performRequest: Unexpected response code 400 using Volley

如何解决我收到 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,它们工作正常。

更新

我阅读了 this post 并将其添加到我的错误例程中:

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?