当前位置: 首页 > 知识库问答 >
问题:

Android Volley-BasicNetwork.PerformRequest:意外响应代码400

姚才捷
2023-03-14

问题陈述:

我正在尝试访问一个REST API,它将使用Volley返回一个用于各种HTTP状态代码(400、403、200等)的JSON对象。

protected void getLogin() {   
    final String mURL = "https://somesite.com/api/login";

    EditText username = (EditText) findViewById(R.id.username);
    EditText password = (EditText) findViewById(R.id.password);

    // Post params to be sent to the server
    HashMap<String, String> params = new HashMap<String, String>();
    params.put("username", username.getText().toString());
    params.put("password", password.getText().toString());

    JsonObjectRequest req = new JsonObjectRequest(mURL, new JSONObject(
            params), new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {

            try {
                JSONObject obj = response
                        .getJSONObject("some_json_obj");

                Log.w("myApp",
                        "status code..." + obj.getString("name"));

                // VolleyLog.v("Response:%n %s", response.toString(4));

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.w("error in response", "Error: " + error.getMessage());
        }
    });

    // add the request object to the queue to be executed
    AppController.getInstance().addToRequestQueue(req);
}

共有1个答案

鲜于光赫
2023-03-14

在不更改volley源代码的情况下实现此目的的一种方法是检查volleyerr中的响应数据,并自己解析它。

F605DA3Commit开始,Volley会引发包含原始网络响应的ServerError异常。

因此您可以在错误侦听器中执行类似的操作:

/* import com.android.volley.toolbox.HttpHeaderParser; */
public void onErrorResponse(VolleyError error) {

    // As of f605da3 the following should work
    NetworkResponse response = error.networkResponse;
    if (error instanceof ServerError && response != null) {
        try {
            String res = new String(response.data,
                       HttpHeaderParser.parseCharset(response.headers, "utf-8"));
            // Now you can use any deserializer to make sense of data
            JSONObject obj = new JSONObject(res);
        } catch (UnsupportedEncodingException e1) {
            // Couldn't properly decode data to string
            e1.printStackTrace();
        } catch (JSONException e2) {
            // returned data is not JSONObject?
            e2.printStackTrace();
        }
    }
}

我希望他们实现源文件中提到TODO

 类似资料:
  • 问题内容: 我在使用排球库发出网络请求时遇到此错误,我遵循以下链接Android Volley- BasicNetwork.performRequest:意外的响应代码400和意外的响应代码404凌空,但在我的情况下它们都不起作用。这是我的请求代码 有谁能告诉我我的代码在哪里做错了?任何帮助都是可观的。 问题答案: 通常,此响应是由发送错误的URL参数引起的。请检查每个参数的拼写,并确保是否以字符

  • 我正在尝试创建一个用户登录页面,当我尝试注册时,我得到了这个错误。我想Json对象部分有问题。我尝试在论坛中搜索其他答案,但似乎都没有解决我的问题。请求你帮我解决这个问题。谢谢是提前的。 我的原木猫

  • 问题内容: 我正在对旧项目进行更新,到目前为止,我对Android的了解不多。在项目中,我们有关于产品的评论部分。 对于较早发送后的评论,我们返回0(某些错误)和1(成功)。 下面是我们正在使用的代码。 现在,我们将返回对象从0/1更改为用户对象。 是否需要将JsonObjectRequest更新为GJSON请求?否则对象也会被JsonObjectRequest解析? 我问是因为当我在上面执行时,

  • 我正在更新旧项目 在早些时候发送后,我们返回了0作为注释(某些错误) 下面是我们使用的代码。 现在我们已经将返回对象从0/1更改为用户对象。 是否需要将JsonObjectRequest更新为GJSON请求?或者对象也会被JsonObjectRequest解析? 我这样问是因为当我执行上面的命令时,我得到的错误如下。 知道我为什么会出现这个错误吗? 注意:此URL对于iPhone应用程序运行良好。

  • 我想将表单数据发送到服务器。我正在使用volly库来实现这一点,但下面的代码显示了以下错误。 意外响应代码405 com。Android截击服务器错误 我的代码是: **logcat看起来像这样**