【问题标题】:Android Volley sending json data getting errorAndroid Volley 发送 json 数据获取错误
【发布时间】:2016-11-01 20:10:05
【问题描述】:

我正在尝试使用 volley notwork 库登录 'com.android.volley:volley:1.0.0'

如果我使用硬编码 json 对象参数,它工作正常,但万一从 EditText 获取值获取服务器错误

错误跟踪

11-01 17:07:10.937 8456-8750/com.furdo.android E/Volley: [277] BasicNetwork.performRequest: Unexpected response code 400 for https://url/
11-01 17:07:10.938 8456-8456/com.furdo.android D/Volley: [1] override.onErrorResponse: Furdo:Proceed
11-01 17:07:10.938 8456-8456/com.furdo.android W/System.err: com.android.volley.ServerError
11-01 17:07:10.938 8456-8456/com.furdo.android W/System.err:     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:163)
11-01 17:07:10.938 8456-8456/com.furdo.android W/System.err:     at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)
11-01 17:07:11.549 8456-8536/com.furdo.android E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab6e9480

jsonObject.put("mobile_no", str_email_or_phone); // 从editText获取值不起作用 jsonObject.put("mobile_no", "9999999999"); // 硬代码工作

即使 String var="value" 也有同样的错误

String str_email_or_phone = et_enter_no_or_email.getText().toString().trim();
JSONObject jsonObject = new JSONObject();
    try {
        jsonObject.put("mobile_no", str_email_or_phone);// getting value from editText not working
        jsonObject.put("mobile_no", "9999999999");// Hard code working

    } catch (Exception ex) {
        ex.printStackTrace();
    }
    if (jsonObject.length() >0) {
        JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, Api.BASE_URL + Api.CHECK_USER, jsonObject,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d(TAG, response.toString());
                    }
                }, new Response.ErrorListener() {


            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                // hide the progress dialog
            }
        }) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put("Accept", "application/www.inception.v1");
                params.put("Content-Type", "application/json");
                return params;
            }
        };
        // Adding request to request queue
        MyApplication.getInstance().addToRequestQueue(jsonObjReq, "tag");
    }

【问题讨论】:

  • 问题明显出在参数上。调试时,初始化后str_email_or_phone的值是多少?
  • 即使在创建 jsonObject 时也能获得正确的值。
  • 这是一个基本的String var,所以它以某种方式影响请求是没有意义的。尝试通过调试客户端、登录服务器来找出这些请求之间的差异,甚至可以使用 Fiddler 来监控请求,但在我看来这有点矫枉过正。
  • 显示错误跟踪?
  • 添加错误跟踪请检查

标签: android android-volley


【解决方案1】:

从堆栈跟踪中可以清楚地看出,您正在从服务器获得 400 响应。您的客户端(android 代码)很好。

检查您的服务器,了解为什么它对虚拟请求响应良好,但对有效请求响应为 400。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 2018-12-17
    相关资源
    最近更新 更多