2016-05-27 9 views
5

Hallo ich benutze Volley für meine Login-Seite. Ich brauche, um Daten weitergeben, wie diese WeisePost-Methode mit Volley funktioniert nicht

{ 
userID : '-988682425884628921', 
email :'[email protected]', 
passwd : '123ss' 
} 

I POST-Methode verwenden, Daten zu senden, habe ich bereits in DHC überprüfen, die Api in DHC funktionieren prima und ich bin immer JSON Response, aber wenn ich versuche, mit Volley i Ich kann keine Antwort bekommen. und nicht einmal ein Fehler in meinem Logcat.

JAVA-Code

RequestQueue mVolleyQueue = Volley.newRequestQueue(this); 

    CustomRequest req = new CustomRequest(Request.Method.POST,url,null, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        Log.v("tag","login response " + response); 
       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.v("tag","login error response " + error.getMessage()); 
     } 
    }){ 
     @Override 
     public Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> params = new HashMap<String, String>(); 

      params.put("userID", "-988682425884628921"); 
      params.put("email", "[email protected]"); 
      params.put("passwd", "123ss"); 
      return params; 
     } 


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

Fehler

05-28 09:20:14.696 2450-2468/com.android.msahakyan.expandablenavigationdrawer E/tag﹕ parseNetworkError is ! null 
05-28 09:20:14.697 2450-2468/com.android.msahakyan.expandablenavigationdrawer E/tag﹕ parseNetworkError status code : 400 
05-28 09:20:14.697 2450-2468/com.android.msahakyan.expandablenavigationdrawer E/tag﹕ parseNetworkError message : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> 
<HTML><HEAD><TITLE>Bad Request</TITLE> 
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD> 
<BODY><h2>Bad Request - Invalid Header</h2> 
<hr><p>HTTP Error 400. The request has an invalid header name.</p> 
</BODY></HTML> 


    } 
+0

Versuchen Sie, StringRequest anstelle von JsonObjectRequest zu verwenden. Ich sehe, dass das JSON im JSONArray Format ist, also könnte das das Problem sein. –

+0

@SomnathPal stringrequest funktioniert auch nicht –

+0

Sie übergeben Parameter im Körper, müssen getParams() -Methode überschreiben und Parameter übergeben – Dory

Antwort

4

Ihr Problem gelöst. Nur verwendet JsonArrayRequest und übergebenen Parameter in JsonObject Form:

Map<String, String> params = new HashMap<String, String>(); 
    params.put("userID", "userid"); 
    params.put("email","email"); 
    params.put("passwd", "password"); 
    JsonArrayRequest request = new JsonArrayRequest(Request.Method.POST, "url", new JSONObject(params), 
      new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray response) { 
        System.out.println("response -->> " + response.toString()); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        System.out.println("change Pass response -->> " + error.toString()); 
       } 
      }); 

    request.setRetryPolicy(new 

      DefaultRetryPolicy(60000, 
      DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
      DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 


    Volley.newRequestQueue(activity).add(request); 

Keine Notwendigkeit der getParams() oder getHeaders() überschrieben.

Problem: 1 Sie waren immer Antwortcode 500, da der Server die params als JsonObject wurde zu akzeptieren und wir versuchen, String zu ernähren.

Problem: 2 Sie wurden mit JsonObjectRequet aber die Antwort vom Server war in JsonArray so müssen Sie JsonArrayRequest verwenden, um die Reaktion in JsonArray

Versuchen zu akzeptieren und lassen Sie mich wissen, das hilft oder nicht :)

+0

Großartig ... Glückliche Codierung .. !! –

1

Sie müssen protected Map<String, String> getParams() außer Kraft zu setzen Parameter in POST zu übergeben.

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, 
 
      url, params, 
 
      new Response.Listener<JSONObject>() { 
 

 
       @Override 
 
       public void onResponse(JSONObject response) { 
 
        Log.d("Login Response", response.toString()); 
 

 

 
        hidepDialog(); 
 
       } 
 
      }, new Response.ErrorListener() { 
 

 
     @Override 
 
     public void onErrorResponse(VolleyError error) { 
 

 
      System.out.println(error.getStackTrace()); 
 
      VolleyLog.d("ErrorVolley", "Error: " + error.getStackTrace()); 
 
      hidepDialog(); 
 
     } 
 
    }) { 
 

 
      @Override 
 
      protected Map<String, String> getParams() { 
 
       Map<String, String> params = new HashMap<String, String>(); 
 
       params.put("userID", "2")); 
 
       params.put("email","[email protected]"); 
 
       params.put("passwd", "ddddd"); 
 

 
       return params; 
 
      } 
 
     };

+0

immer noch gleich keine Änderung: :(( –

+0

wenn es mit stringrequest ändern zeigt es BasicNetwork.performRequest: Unerwarteter Antwortcode 500 für –

+0

Ich überprüfte Fehler 500 und fand, dass dieser Fehler von der Serverseite verursacht werden kann. Es ist kein Fehler von Ihrem Code @AdityaVyas –

2

Ich hatte ein ähnliches Problem.

headers.put("Content-Type", "application/json; charset=UTF-8");

aber Volley selbst einen Content-Type-Parameter hinzugefügt, so gab es zwei dieser Parameter: Ich hatte den Content-Type im getHeaders Methode überschrieben. Löschen Sie die Zeile löste mein Problem.

+0

Du hast meinen Tag gemacht, kämpfst seit Stunden, und das war der Grund :) –

0

Vorsicht vor Content-Type-Header. Volley behandelt es anders als andere Header und es wird nicht in Map <> Header angezeigt. Stattdessen getHeaders vorran() -Methode Inhaltstyp festlegen, sollten Sie getBodyContentType() wie folgt außer Kraft setzen:

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

i gleiche Problem Einsatz haben dies:

 StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        Toast.makeText(LoginActivity.this, response, Toast.LENGTH_LONG).show(); 

       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Toast.makeText(LoginActivity.this, error.toString(), Toast.LENGTH_LONG).show(); 

       } 
      }) { 

     @Override 
     public Map<String, String> getParams() { 
      HashMap<String, String> headers = new HashMap<String, String>(); 
      headers.put("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); 
      headers.put("UN", UserName); 
      headers.put("PW", PassWord); 
      return headers; 


     } 

    }; 

    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    requestQueue.add(stringRequest); 

brauchen nur headers.put("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); zu parms hinzufügen

viel Glück.