2015-12-20 1 views
-1

я неоднократно получать этот Неожиданный код ответа 500 и 400. Пожалуйста, помогитеНеожиданный ответ 400 и 500 в залпе с gson после метода

GsonRequest Класс

общественного класса GsonRequest расширяет Request

{

частный Gson mGson = новый Gson();

закрытый класс clazz;

частные заголовки карт;

private Map<String, String> params; 
private Listener<T> listener; 
//String mRequestBody; 
Map<String, String> mRequestBody; 

/** 
* Make a GET request and return a parsed object from JSON. 
* 
* @param url URL of the request to make 
* @param clazz Relevant class object, for Gson's reflection 
*/ 
public GsonRequest(int method, 
        String url, 
        Class<T> clazz, 
        Listener<T> listener, 
        ErrorListener errorListener) { 
    super(method, url, errorListener); 
    this.clazz = clazz; 
    this.listener = listener; 
    mGson = new Gson(); 
} 

/** 
* Make a POST request and return a parsed object from JSON. 
* 
* @param url URL of the request to make 
* @param clazz Relevant class object, for Gson's reflection 
*/ 
public GsonRequest(int method, 
        String url, 
        Class<T> clazz, 
        Map<String, String> headers, 
        Map<String, String> requestBody, 
        //String requestBody, 
        Listener<T> listener, 
        ErrorListener errorListener) { 

    super(method, url, errorListener); 
    //this.mRequestBody = requestBody; 
    this.params = requestBody; 
    this.listener = listener; 
    this.headers = headers; 
    mGson = new Gson(); 
} 

@Override 
public Map<String, String> getHeaders() throws AuthFailureError { 
    return (headers != null) ? headers : super.getHeaders(); 
} 

@Override 
public String getBodyContentType() { 
    return "application/x-www-form-urlencoded"; 
} 


@Override`protected void deliverResponse(T response) { 
    listener.onResponse(response); 
} 


@Override 
protected Response<T> parseNetworkResponse(NetworkResponse response) { 
    try { 
     String json = new String(
       response.data, HttpHeaderParser.parseCharset(response.headers)); 
     return Response.success(
       mGson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response)); 
    } catch (UnsupportedEncodingException e) { 
     return Response.error(new ParseError(e)); 
    } catch (JsonSyntaxException e) { 
     return Response.error(new ParseError(e)); 
    } 
} 

}

Мой класс активности

общественный класс Act_GsonRequest расширяет активность { частное TextView mTvResult;

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.act__gson_request); 

    mTvResult = (TextView) findViewById(R.id.tv_result); 

    Button btnSimpleRequest = (Button) findViewById(R.id.btn_gson_request); 
    btnSimpleRequest.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      RequestQueue queue=Volley.newRequestQueue(Act_GsonRequest.this); 
      Map<String, String> stringMap = new HashMap<>(); 
      stringMap.put("from", "Kathmandu"); 
      stringMap.put("to", "Kakadvitta"); 
      stringMap.put("date", "2015-12-20"); 
      Log.e("Request body :::::", stringMap.toString()); 


      HashMap<String, String> headers = new HashMap<String, String>(); 
      headers.put("Content-Type", "application/json"); 
      headers.put("Authorization", "Basic YWRtaW46YWRtaW4="); 
      headers.put("user", "admin"); 
      Log.e("Headers :::::", headers.toString()); 


      GsonRequest<MyClass1> req = new GsonRequest(
        Method.POST, 
        "http://192.168.0.112:8080/customer/webresources/generic/trips", 
        MyClass1.class, 
        headers, 
        stringMap, 
        createMyReqSuccessListener(), 
        createMyReqErrorListener()); 


      queue.add(req); 




     }; 

     }); 
} 

private String buildRequestBody(Object content) { 
    String output = null; 
    if ((content instanceof String) || 
      (content instanceof JSONObject) || 
      (content instanceof JSONArray)) { 
     output = content.toString(); 
    } else if (content instanceof Map) { 
     Uri.Builder builder = new Uri.Builder(); 
     HashMap hashMap = (HashMap) content; 
     if (hashMap != null) { 
      Iterator entries = hashMap.entrySet().iterator(); 
      while (entries.hasNext()) { 
       Map.Entry entry = (Map.Entry) entries.next(); 
       builder.appendQueryParameter(entry.getKey().toString(), entry.getValue().toString()); 
       entries.remove(); 
      } 
      output = builder.build().getEncodedQuery(); 
     } 
    } 

    return output; 
} 
private Response.Listener<MyClass1> createMyReqSuccessListener() { 
    return new Response.Listener<MyClass1>() { 
     @Override 
     public void onResponse(MyClass1 response) { 
      Log.e("Response message",response.getStatus()); 
     } 
    }; 
} 


private Response.ErrorListener createMyReqErrorListener() { 
    return new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      mTvResult.setText(error.getMessage()); 
      NetworkResponse networkResponse = error.networkResponse; 
      if (networkResponse != null) { 
       Log.e("Volley", "Error. HTTP Status Code:"+networkResponse.statusCode); 
      } 
      if (error instanceof TimeoutError) { 
       Log.e("Volley", "TimeoutError"); 
      }else if(error instanceof NoConnectionError){ 
       Log.e("Volley", "NoConnectionError"); 
      } else if (error instanceof AuthFailureError) { 
       Log.e("Volley", "AuthFailureError"); 
      } else if (error instanceof ServerError) { 
       Log.e("Volley", "ServerError"); 
      } else if (error instanceof NetworkError) { 
       Log.e("Volley", "NetworkError"); 
      } else if (error instanceof ParseError) { 
       Log.e("Volley", "ParseError"); 
      } 
     } 
    }; 
} 

}

+0

Добро пожаловать в Stack Overflow.Этот вопрос не указывает, где он терпит неудачу или что вы попытались исправить проблему, с которой вы сталкиваетесь. – Pachonk

+0

работает отлично с json, но когда я пытался позвонить с gson. Это дает мне неожиданную ошибку 400 (в основном). Я не знаю, что случилось с кодом выше. –

ответ

0

после использования JSONObject вместо HashMap и совершали некоторые изменения в класса GsonRequest, я успешно решить эту проблему. В любом случае спасибо, ребята, за ваш ответ Happy кодирования :)

// Внутри активности, откуда выполняется вызов апи

   String url = "http://www.esewa.com/register/new"; 

       RequestQueue queue = Volley.newRequestQueue(SignUpActivity.this); 
       JSONObject jsonObject = new JSONObject(); 
       try { 
        jsonObject.put("some_key1", "some_value1"); 

jsonObject.put ("some_key2", "some_value2");

   } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
       Log.d("Request bodyJson:::::", jsonObject.toString()); 

       HashMap<String, String> headers = new HashMap<String, String>(); 
       headers.put("Content-Type", "application/json"); 
       Log.d("Headers :::::", headers.toString()); 

GsonRequest REQ = новый GsonRequest ( Request.Method.POST, гиперссылка, ResponseClass.class, заголовки, JSONObject, createMyReqSuccessListener(), Utility.createMyReqErrorListener (coordinatorLayout, progressDialog, TAG))

// GsonRequest класс

общественного класса GsonRequest расширяет запрос {

private Gson gson = new Gson(); 
private Class<T> clazz; 
private Map<String, String> headers; 
private Map<String, String> params; 
private Listener<T> listener; 
JSONObject jsonObject=null; 

/** 
* Make a GET request and return a parsed object from JSON. 
* 
* @param url URL of the request to make 
* @param clazz Relevant class object, for Gson's reflection 
*/ 
public GsonRequest(int method, 
        String url, 
        Class<T> clazz, 
        Listener<T> listener, 
        ErrorListener errorListener) { 
    super(method, url, errorListener); 
    this.clazz = clazz; 
    this.listener = listener; 
    gson = new Gson(); 
} 

/** 
* Make a POST request and return a parsed object from JSON. 
* 
* @param url URL of the request to make 
* @param clazz Relevant class object, for Gson's reflection 
*/ 
public GsonRequest(int method, 
        String url, 
        Class<T> clazz, 
        Map<String, String> headers, 
        JSONObject jsonObject, 
        Listener<T> listener, 
        ErrorListener errorListener) { 

    super(method, url, errorListener); 
    this.jsonObject = jsonObject; 
    this.listener = listener; 
    this.clazz = clazz; 
    this.headers = headers; 
    gson = new Gson(); 
} 

@Override 
public Map<String, String> getHeaders() throws AuthFailureError { 
    return (headers != null) ? headers : super.getHeaders(); 
} 

@Override 
public String getBodyContentType() { 
    return "application/json; charset=utf-8"; 
} 

@Override 
protected Map<String, String> getParams() throws AuthFailureError { 
    return params; 
} 

// Добавлен этот метод

@Override 
public byte[] getBody() throws AuthFailureError { 
    try { 
     return jsonObject.toString().getBytes(getParamsEncoding()); 
    } catch (UnsupportedEncodingException e) { 

    } 
    return null; 
} 

@Override 
protected void deliverResponse(T response) { 
    listener.onResponse(response); 
} 

@Override 
protected Response<T> parseNetworkResponse(NetworkResponse networkResponse) { 
    try { 
     String jsonString = new String(networkResponse.data, HttpHeaderParser.parseCharset(networkResponse.headers)); 
     T response = new GsonBuilder().create().fromJson(jsonString, clazz); 
     //clazz.getClass() 
     com.android.volley.Response<T> result = com.android.volley.Response.success(response, 
       HttpHeaderParser.parseCacheHeaders(networkResponse)); 
     return result; 
    } catch (UnsupportedEncodingException e) { 
     return com.android.volley.Response.error(new ParseError(e)); 
    } catch (JsonSyntaxException e) { 
     return com.android.volley.Response.error(new ParseError(e)); 
    } 




} 

@Override 
protected VolleyError parseNetworkError(VolleyError volleyError){ 
    if(volleyError.networkResponse != null && volleyError.networkResponse.data != null){ 
     VolleyError error = new VolleyError(new String(volleyError.networkResponse.data)); 
     AppLog.showLog("Inside parseNetworkError::::::::: "); 
     volleyError = error; 
    } 

    return volleyError; 
} 

} getBody()

0

Если его из-за медленного подключения к Интернету изменить RetryPolicy. Просто установите значение тайм-аута в два раза по умолчанию. Работал fine.add это до queue.add(req);

req.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 2, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
    queue.add(req); 
Смежные вопросы