2016-07-01 5 views
0

Я использовал имя пользователя Volley для POST, пароль и адрес электронной почты пользователя для регистрации. Я сделал ссылку от This tutorial. И работал так же, как определено в этом уроке.Volley Post Request не работает с API

Вот мой код:

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, 
          URL_string.api_url,null 
          new Response.Listener<JSONObject>() { 
           @Override 
           public void onResponse(JSONObject response) { 
            Log.i("Result", "Success"); 
           } 
          }, new Response.ErrorListener() { 
         @Override 
         public void onErrorResponse(VolleyError error) { 
          Log.i("Result", "UnSuccess"); 
         } 
        }){ 

         @Override 
         protected Map<String, String> getParams() throws AuthFailureError { 
          Map<String, String> params = new HashMap<String, String>(); 
          Log.i("Result_Params",emailValue + passwordValue + nameValue); 
          params.put("email", emailValue); 
          params.put("password", passwordValue); 
          params.put("name", nameValue); 
          return super.getParams(); 
         } 

         @Override 
         public Map<String, String> getHeaders() throws AuthFailureError { 
          HashMap<String, String> headers = new HashMap<String, String>(); 
          headers.put("Content-Type", "application/json; charset=utf-8"); 
          return super.getHeaders(); 
         } 

        }; 

        RequestQueue requestQueue = Volley.newRequestQueue(this); 
        jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 2, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
        requestQueue.add(jsonObjectRequest); 

Но мой код показывает эту ошибку:

[368] BasicNetwork.performRequest: Unexpected response code 422 for http://myapi.com/api/register 

Ошибка 422 определяется по API, как:

{ 
     "message": "422 Unprocessable Entity", 
     "errors": { 
     "email": [ 
      "The email field is required." 
     ], 
     "password": [ 
      "The password field is required." 
     ], 
     "name": [ 
      "The password field is required." 
     ] 
     }, 
     "status_code": 422 
} 

Я пробовал:

  1. изменения JsonObjectRequest в StringRequest,

  2. оригинальный URL на месте URL_string.api_url,

Но ответ все еще то же самое. Это из-за того, что я не создал класс для библиотеки Volley? Я тоже сделал это с Androidhive.info, но не смог!

Я не знаю, как это сделать сейчас, в то время как вход в getParams регистрирует правильное значение имени, электронной почты и pw, введенных пользователем, но все же операция POST не работает. Пожалуйста помоги! Спасибо заранее!

+0

вы должны вернуть не paramters супер значение – silverFoxA

+0

Да, это worked.Thank вам столько @silverFoxA – Swr7der

ответ

2

Вам необходимо вернуть созданный объект params, а не возвращать метод родителя (который пуст).

@Override 
protected Map<String, String> getParams() throws AuthFailureError { 
    Map<String, String> params = new HashMap<String, String>(); 
    Log.i("Result_Params",emailValue + passwordValue + nameValue); 
    params.put("email", emailValue); 
    params.put("password", passwordValue); 
    params.put("name", nameValue); 
    return params; //not super.getParams(); 
} 

Как отметил pablobu, это также относится и к вашему getHeaders():

@Override 
public Map<String, String> getHeaders() throws AuthFailureError { 
    HashMap<String, String> headers = new HashMap<String, String>(); 
    headers.put("Content-Type", "application/json; charset=utf-8"); 
    return headers; //not super.getHeaders(); 
} 
+1

такое же изменение требуется на getHeaders() return – pablobu

+0

Сохранено мое время ... большое вам спасибо :) DaveChen и @pablobu – Swr7der