2016-08-03 4 views
-2

В моем проекте я хочу отправить запрос с помощью карты Volley внутри карты.
Но я получаю ошибки, 406 ошибок.Волейбол Карта внутри Карта Json Request

Вот мой запрос:

StringRequest myReq = new StringRequest(Method.POST, METHOD_ACCOUNT_LOGIN, 
       new Response.Listener<String>() { 

        @Override 
        public void onResponse(String response) { 


         JSONObject veri_json; 
         try { 
          veri_json = new JSONObject(response); 


         } catch (JSONException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 

        } 
       }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       System.out.println(error.getMessage()); 
      } 
     }) { 


      protected Map<String, String> getParams() 
        throws com.android.volley.AuthFailureError { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("user", generalParams); 

       return params; 
      }; 
     }; 

     App.getInstance().addToRequestQueue(myReq); 
    } 

, но я хочу, чтобы импортировать внутри этого кода

params.put("user",generalParams) 

эти строки:

generalParams.put("name",notificationName); 
generalParams.put("notificationId", notificationID); 
generalParams.put("phoneNumber", phoneNumber); 
generalParams.put("regionType", regionType); 
generalParams.put("countryCode", countryCode); 
generalParams.put("platform", platform); 

вот что я хочу отправить:

"user":{ 
    "name":"John", 
    "notificationId":"id", 
    "phoneNumber":"number", 
    "regionType":"en", 
    "countryCode": "+10", 
    "platform":”ios” 
} 

Однако я не знаю, как с этим справиться.

ответ

0

Во-первых, 406 означает, что вы отправляете данные некорректно или сервер не принимает данные, отправленные ему по этому адресу. Если вы уверены, что сервер не принимает данные в формате JSON, а затем двигаться дальше ...

Для того, чтобы создать JSONObject как этот { user: {} }, вам нужно поставить JSONObject в "user" ключе, а не явный HashMap, потому что будет toString it.

Таким образом, вместо этого, делать вот так

protected Map<String, String> getParams() { 
    // Outer object 
    Map<String, String> params = new HashMap<String, String>(); 

    // Inner object 
    Map<String, String> userParams = new HashMap<String, String>(); 
    userParams.put("name",notificationName); 
    userParams.put("notificationId", notificationID); 
    userParams.put("phoneNumber", phoneNumber); 
    userParams.put("regionType", regionType); 
    userParams.put("countryCode", countryCode); 
    userParams.put("platform", platform); 

    JSONObject userJSON = new JSONObject(userParams); 

    // Nest the object at "user" 
    params.put("user", userJSON.toString()); 

    return params; 
} 

Помимо:

Лично я бы порекомендовал вам изменить сервер принять пользователя в таком виде, потому что значение ключа кажется неуместным, если сервер проверяет тип строки на этом ключе, что означает, что вы должны идеально переструктурировать API.

{ 
    "name":"John", 
    "notificationId":"id", 
    etc... 
} 
+0

Благодарим за ответ. Но я действительно новичок в этой просьбе. Так где я могу точно написать эти коды? это в @Override protected Map getParams()? –

+0

А, да. Извини за это. –

+0

это все еще BasicNetwork.performRequest: Неожиданный код ответа 406 для :(на самом деле этот сервер принимает это, потому что приложение ios использует этот метод. –