2016-11-08 4 views
0

В строковом запросе для входа в систему. OnResponse все, котор я возвращен будет кодом состояния 200. Я хотел был бы получить возвращенные данные также. Я не уверен, куда идти с этого момента? Любые идеи о том, как вернуть данные, а не только код состояния?Android Volley onResponse получить данные

public void requestWithSomeHttpHeaders() { 

    try { 
     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     String URL = "http://......"; 
     JSONObject jsonBody = new JSONObject(); 
     jsonBody.put("username", "yourusername"); 
     jsonBody.put("password", "yourpassword"); 
     final String mRequestBody = jsonBody.toString(); 

     StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       Log.i("VOLLEY", response); 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.e("VOLLEY", error.toString()); 
      } 
     }) { 
      @Override 
      public String getBodyContentType() { 
       return "application/json; charset=utf-8"; 
      } 

      @Override 
      public byte[] getBody() throws AuthFailureError { 
       try { 
        return mRequestBody == null ? null : mRequestBody.getBytes("utf-8"); 
       } catch (UnsupportedEncodingException uee) { 
        VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8"); 
        return null; 
       } 
      } 

      @Override 
      protected Response<String> parseNetworkResponse(NetworkResponse response) { 
       String responseString = ""; 
       if (response != null) { 
        responseString = String.valueOf(response.statusCode); 
        // can get more details such as response.headers 
        System.out.println(responseString); 
       } 
       return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response)); 
      } 
     }; 

     requestQueue.add(stringRequest); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 
+0

Было ли это действительно необходимо реализовать более чем '' onResponse' и onError'? –

ответ

1

Предпочтительно определить способ.

private void doLogin() { 
    // TODO: startActivity? 
} 

Тогда зови, что

StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      Log.i("VOLLEY", response); 

      doLogin(); 
     } 

Если вы хотите, чтобы данные с сервера, то есть то, что String response есть. Проверьте свой Logcat.

Как уже упоминалось в комментариях, используя StringRequest без реализации getBody, parseNetworkResponse и getBodyContentType могли бы работать лучше.

+0

В logcat все, что я вижу, это I/VOLLEY: 200 – SoundCheese

+0

Если я сделаю что-то подобное в Google Postman, я получаю все виды данных. – SoundCheese

+0

Я не знаю, каков ваш URL, но, похоже, он просто возвращает «200». Если это проблема, все дело на стороне сервера, а не проблема с Volley. –

1

Если вы хотите, чтобы разобрать JSON добавить метод как этот

public Profile getUserProfile(String response){ 
    Profile profile = null; 
    try { 
     profile = new Profile(); 
     JSONObject jsonObject = new JSONObject(response); 
      profile.setId(jsonObject.getInt(context.getString(R.string.profile_id))); 
     profile.setLastName(jsonObject.getString(context.getString(R.string.profile_lastName))); 
     profile.setName(jsonObject.getString(context.getString(R.string.profile_name))); 
     profile.setEmail(jsonObject.getString(context.getString(R.string.profile_email))); 


    } catch (JSONException | NullPointerException e) { 
     e.printStackTrace(); 
     return null; 
    } 

    return profile; 
} 

В вашем методе onResponse

 @Override 
     public void onResponse(String response) { 
      //If you have son object 
      Profile profile = getUserProfile(response) 
     }