2015-06-16 7 views
9

Ich muss JSONObject (mit Volley) zu einem Web-Service, der die Antwort in JSONArray Format zurückgibt.Post Json Objektdaten JSON-Array Antwort mit Volley in Android

Hier ist was ich bisher versucht habe.

final JSONObject requestJsonObject = new JSONObject(); 
requestJsonObject.put("username", userName); 
requestJsonObject.put("password", password); 

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST, ServiceUrls.LOGIN_URL, requestJsonObject, loginResponseListener, loginErrorListener); 


private Listener<JSONObject> loginResponseListener = new Listener<JSONObject>() { 
    @Override 
    public void onResponse(JSONObject resposne) { 
     //other stuff goes here 
    } 
}; 

Aber ich JSONException sagen immer, dass JSONArray nicht zu JSONObject umgewandelt werden kann. Gibt es eine Möglichkeit, die Antwort im Format JSONArray zu bekommen? Was ist die bestmögliche Lösung für mein Problem? Wie kann ich JSONObject senden, wenn ich StringRequest anstelle von JsonObjectRequest verwende? Bitte führen Sie mich

+0

Sie JsonArrayRequest –

+0

JsonArrayRequest erfordert Eingabeparameter als JSONArray verwenden können, die für diesen Fall nicht geeignet ist – anhtuannd

+0

Sie Mann – Shikhar

Antwort

11

Below Hilfsklasse hat mein Problem

Fest
public class CustomRequest extends JsonRequest<JSONArray> { 

protected static final String PROTOCOL_CHARSET = "utf-8"; 
/** 
* Creates a new request. 
* @param method the HTTP method to use 
* @param url URL to fetch the JSON from 
* @param requestBody A {@link String} to post with the request. Null is allowed and 
* indicates no parameters will be posted along with request. 
* @param listener Listener to receive the JSON response 
* @param errorListener Error listener, or null to ignore errors. 
*/ 
public CustomRequest(int method, String url, String requestBody, Listener<JSONArray> listener, ErrorListener errorListener) { 
    super(method, url, requestBody, listener, errorListener); 
} 

/** 
* Creates a new request. 
* @param url URL to fetch the JSON from 
* @param listener Listener to receive the JSON response 
* @param errorListener Error listener, or null to ignore errors. 
*/ 
public CustomRequest(String url, Listener<JSONArray> listener, ErrorListener errorListener) { 
    super(Method.GET, url, null, listener, errorListener); 
} 

/** 
* Creates a new request. 
* @param method the HTTP method to use 
* @param url URL to fetch the JSON from 
* @param listener Listener to receive the JSON response 
* @param errorListener Error listener, or null to ignore errors. 
*/ 
public CustomRequest(int method, String url, Listener<JSONArray> listener, ErrorListener errorListener) { 
    super(method, url, null, listener, errorListener); 
} 

/** 
* Creates a new request. 
* @param method the HTTP method to use 
* @param url URL to fetch the JSON from 
* @param jsonRequest A {@link JSONArray} to post with the request. Null is allowed and 
* indicates no parameters will be posted along with request. 
* @param listener Listener to receive the JSON response 
* @param errorListener Error listener, or null to ignore errors. 
*/ 
public CustomRequest(int method, String url, JSONArray jsonRequest, Listener<JSONArray> listener, ErrorListener errorListener) { 
    super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener, errorListener); 
} 

/** 
* Creates a new request. 
* @param method the HTTP method to use 
* @param url URL to fetch the JSON from 
* @param jsonRequest A {@link JSONObject} to post with the request. Null is allowed and 
* indicates no parameters will be posted along with request. 
* @param listener Listener to receive the JSON response 
* @param errorListener Error listener, or null to ignore errors. 
*/ 
public CustomRequest(int method, String url, JSONObject jsonRequest, Listener<JSONArray> listener, ErrorListener errorListener) { 
    super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener, errorListener); 
} 

/** 
* Constructor which defaults to <code>GET</code> if <code>jsonRequest</code> is 
* <code>null</code>, <code>POST</code> otherwise. 
* 
* @see #MyjsonPostRequest(int, String, JSONArray, Listener, ErrorListener) 
*/ 
public CustomRequest(String url, JSONArray jsonRequest, Listener<JSONArray> listener, ErrorListener errorListener) { 
    this(jsonRequest == null ? Method.GET : Method.POST, url, jsonRequest, listener, errorListener); 
} 

/** 
* Constructor which defaults to <code>GET</code> if <code>jsonRequest</code> is 
* <code>null</code>, <code>POST</code> otherwise. 
* 
* @see #MyjsonPostRequest(int, String, JSONObject, Listener, ErrorListener) 
*/ 
public CustomRequest(String url, JSONObject jsonRequest, Listener<JSONArray> listener, ErrorListener errorListener) { 
    this(jsonRequest == null ? Method.GET : Method.POST, url, jsonRequest, listener, errorListener); 
} 

@Override 
protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) { 
    try { 
     String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); 
     return Response.success(new JSONArray(jsonString), HttpHeaderParser.parseCacheHeaders(response)); 
    } catch (UnsupportedEncodingException e) { 
     return Response.error(new ParseError(e)); 
    } catch (JSONException je) { 
     return Response.error(new ParseError(je)); 
    } 
} 

} 

Wie dies zu benutzen?

JSONObject requestJsonObject = new JSONObject(); 
    requestJsonObject.put("first_name", firstName); 
    requestJsonObject.put("last_name", lastName); 
    requestJsonObject.put("email_address", emailId); 
    requestJsonObject.put("password", password); 

    CustomRequest jsonObjReq = new CustomRequest(Method.POST, YOUR_URL, requestJsonObject, responseListener, errorListener); 
+0

dank Sir werfen kann, wie diese Klasse zu benutzen? –

+0

@mahdipishguy: Aktualisiert meine ans – Santhosh

+0

Ich habe Ihren Code und während der Anfrage zu requestQueue JsonObjReq zeigen Null, aber die RequestjsonObject enthalten solche Art von Wert ** "{" id ":" 1 "}" ** So ist ein Schlüssel Wertpaar? ? Und wenn es ein KeyValue-Paar als auf der Serverseite ist, wie kann ich es – techDigi

0

Sieht aus wie Sie die JSON-Array-Antwort bekommen.

Können Sie Ihren Code so ändern.

private Listener<JsonArray> loginResponseListener = new Listener<JsonArray>() { 
     @Override 
     public void onResponse(JsonArray resposne) { 
     //other stuff goes here 
     } 
    }; 
-1

versuchen dieses

RequestQueue request = Volley.newRequestQueue(this); 
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url,new Response.Listener<JSONArray>() 
     { 

      @Override 
      public void onResponse(JSONArray response) 
      { 
       List<Contact> result = new ArrayList<Contact>(); 
       for (int i = 0; i < response.length(); i++) 
       { 
        try 
        { 
         result.add(convertContact(response 
           .getJSONObject(i))); 
        } 
        catch (JSONException e) 
        { 

        } 
       } 
       adpt.setItemList(result); 
       adpt.notifyDataSetChanged(); 
      } 
     }, new Response.ErrorListener() 
     { 

      @Override 
      public void onErrorResponse(VolleyError error) 
      { 
       // Handle error 
      } 
     }); 

request.add(jsonArrayRequest);