使用Volley Android向服务器发送POST请求

时间:2017-09-19 03:46:51

标签: android post android-volley

我的应用中有一个登录屏幕。我想从输入字段中检索电话号码,并将其作为一个带有齐射的发布请求发送到我的后端服务器。后端服务器的结构如下:

"user": {
    "phone": 909099999
 }

我尝试过这段代码:

final String phone = login_phoneTET.getText().toString();

    Map<String, String> params = new HashMap<>();
    params.put("phone", phone);

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, 
           Constants.TING_OTP_ENDPOINT,
           new JSONObject(params), 
           new Response.Listener<JSONObject>() {
           @Override
           public void onResponse(JSONObject response) {
            Log.d(TAG, "Success");
           }
           }, new Response.ErrorListener() {
           @Override
           public void onErrorResponse(VolleyError error) {
            Log.d(TAG, "Failed with an Error" + error.getMessage());
            error.printStackTrace();
           }
           }
        ) {
           @Override
           public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<>();
            headers.put("Content-Type", "application/json; charset=utf-8");
            return headers;
          }
       };

    jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(20000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    VolleySingleton.getVolleySingleton(this).addToRequestQueue(jsonObjectRequest);

并尝试使用字符串请求。我一直在logcat中得到这个错误:

E/Volley: [22489] BasicNetwork.performRequest: Unexpected response code 500 for https://:):)/api/user/generateOTP

我是否正确提出此请求或有更好的方法吗?感谢。

2 个答案:

答案 0 :(得分:2)

这是服务器端错误。所以我认为你需要关注你的服务器。

答案 1 :(得分:0)

请使用https://jsonlint.com/验证您的json(您发送的那个,以及您收到的那个)。

如果您编写的JSON是您要发送的JSON:

"user": {
"phone": 909099999}

那么它不是一个有效的JSON,并且有你的错误:

Error: Parse error on line 1:
"user": {   "phone": 909099
------^
Expecting 'EOF', '}', ',', ']', got ':'