2016-03-25 4 views
0

machen Ich versuche, eine Post-Anfrage mit Volley zu machen.Kann Jsonarrayrequest nicht mit Volley

Der Anforderungsparameter ist ein JSON-Array.

Im Anschluss an meine Anfrage Parameter

[ 
"Type", 
{ 
    "User": "email", 
    "password": "dimmer", 

} 
] 

ich eine Methode frameJsonArray haben, die die oben json-Rahmen und im machen Post-Anforderung wie folgt

JsonArrayRequest jsonObjectRequest = new JsonArrayRequest(Request.Method.POST, Constants.requestUrl, frameJsonArray(), 
       new Response.Listener<JSONObject>() { 
        @Override 
        public void onResponse(JSONObject response) { 
        Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_SHORT).show(); 


       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        hideDialog(); 
        error.printStackTrace(); 

       } 
      } 
    ); 

Im immer Fehler in der obigen Codezeile wo ich die Anfrage mache. Wie kann ich das sortieren lassen?

Es folgt mein Fehlerprotokoll

Error:(162, 46) error: constructor JsonArrayRequest in class JsonArrayRequest cannot be applied to given types; 
required: String,Listener<JSONArray>,ErrorListener 
found: int,String,JSONArray,<anonymous Listener<JSONObject>>,<anonymous ErrorListener> 
reason: actual and formal argument lists differ in length 

Es folgt mein frameJsonArrayMethod

public JSONArray frameJsonArray() { 
    JSONObject jsonObject = new JSONObject(); 
try { 
    jsonObject.put("login_type", "Android"); 
    jsonObject.put("username", email); 
    jsonObject.put("password", password); 
    jsonObject.put("short_name", null); 
    jsonObject.put("ip","123.421.12.21"); 

} catch (JSONException e) { 
    e.printStackTrace(); 
} 
JSONArray jsonArray = new JSONArray(); 
jsonArray.put("Login"); 
jsonArray.put(jsonObject); 

Log.d(TAG, "he;ll " + jsonArray.toString()); 
Toast.makeText(getApplicationContext(), jsonArray.toString(), Toast.LENGTH_SHORT).show(); 
return jsonArray; 

}

+0

Was ist der Fehler? –

+0

Ich habe das Fehlerprotokoll –

+0

gepostet Bitte korrigieren Sie Ihre JSON-Daten. doppelte Quotenseite der E-Mail vervollständigen wie „E-Mail“ –

Antwort

1
JsonArrayRequest jsonObjectRequest = new JsonArrayRequest(Request.Method.POST, Constants.requestUrl, frameJsonArray(), 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
        Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_SHORT).show(); 


      } 
     }, 
     new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       hideDialog(); 
       error.printStackTrace(); 

      } 
     } 
); 

ändern JSONObject zu JSONArray in onResponse()

EDIT Der kommende Fehler, da es nur einen Konstruktor in JsonArrayRequest ist das heißt

public JsonArrayRequest(String url, Listener<JSONArray> listener, ErrorListener errorListener){} 

Quelle https://android.googlesource.com/platform/frameworks/volley/+/e7cdf98078bc94a2e430d9edef7e9b01250765ac/src/com/android/volley/toolbox/JsonArrayRequest.java

Sie einige Konstruktor mit 5 Argumente verwenden.

+1

noch im, der gleiche Fehler –

+0

immer getan haben, können Sie Ihren Code innerhalb frameJsonArray() veröffentlichen –

+0

i hinzugefügt haben es –

1

einmal überprüfen Sie Ihre JSON, falsches Format, verpassten Sie doppelte Anführungszeichen.

[ 
"Type", 
{ 
    "User": "email /** you missed double quote here **/, 
    "password": "dimmer", 

} 
] 
+0

ich habe es korrigiert, der Fehler ist bei der Erstellung einer JSON-Array-Anfrage selbst –

+0

akzeptieren Sie die Antwort, wenn es für Sie verwendet. – shobhan

+0

der tatsächliche Fehler ist bei der Herstellung von jsonarrayrequest, die noch nicht gelöst ist –

1
JsonArrayRequest req = new JsonArrayRequest(url, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
        Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_SHORT).show();    
        } 
       }, new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         VolleyLog.d(TAG, "Error: " + error.getMessage()); 
         pDialog.hide(); 
        } 
       }); 

Quelle: http://www.androidhive.info/2014/05/android-working-with-volley-library-1/

+0

ja, aber wie kann ich meine Anfrage Parameter mit dem oben genannten Code-Snippet? –

+0

http://StackOverflow.com/A/18052417/4854450, aber für die Anfrage an API, ist es besser, Retrofit mit GSON zu verwenden, es ist schneller als Volley und ASyncTask. –

Verwandte Themen