1d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru/* 2d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Copyright (C) 2011 The Android Open Source Project 3d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * 4d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Licensed under the Apache License, Version 2.0 (the "License"); 5d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * you may not use this file except in compliance with the License. 6d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * You may obtain a copy of the License at 7d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * 8d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * http://www.apache.org/licenses/LICENSE-2.0 9d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * 10d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Unless required by applicable law or agreed to in writing, software 11d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * distributed under the License is distributed on an "AS IS" BASIS, 12d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * See the License for the specific language governing permissions and 14d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * limitations under the License. 15d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru */ 16d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 17d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Querupackage com.android.volley.toolbox; 18d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 19d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport com.android.volley.NetworkResponse; 20d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport com.android.volley.ParseError; 21d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport com.android.volley.Response; 22d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport com.android.volley.Response.ErrorListener; 23d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport com.android.volley.Response.Listener; 24d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 25d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport org.json.JSONException; 26d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport org.json.JSONObject; 27d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 28d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport java.io.UnsupportedEncodingException; 29d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 30d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru/** 31d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * A request for retrieving a {@link JSONObject} response body at a given URL, allowing for an 32d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * optional {@link JSONObject} to be passed in as part of the request body. 33d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru */ 34d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Querupublic class JsonObjectRequest extends JsonRequest<JSONObject> { 35d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 36d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru /** 37d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Creates a new request. 38e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru * @param method the HTTP method to use 39d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * @param url URL to fetch the JSON from 40d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * @param jsonRequest A {@link JSONObject} to post with the request. Null is allowed and 41d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * indicates no parameters will be posted along with request. 42d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * @param listener Listener to receive the JSON response 43d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * @param errorListener Error listener, or null to ignore errors. 44d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru */ 45e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru public JsonObjectRequest(int method, String url, JSONObject jsonRequest, 46e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru Listener<JSONObject> listener, ErrorListener errorListener) { 47e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener, 48e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru errorListener); 49e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru } 50e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru 51e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru /** 52e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru * Constructor which defaults to <code>GET</code> if <code>jsonRequest</code> is 53e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru * <code>null</code>, <code>POST</code> otherwise. 54e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru * 55e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru * @see #JsonObjectRequest(int, String, JSONObject, Listener, ErrorListener) 56e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru */ 57d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru public JsonObjectRequest(String url, JSONObject jsonRequest, Listener<JSONObject> listener, 58d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru ErrorListener errorListener) { 59e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru this(jsonRequest == null ? Method.GET : Method.POST, url, jsonRequest, 60e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru listener, errorListener); 61d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 62d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 63d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru @Override 64d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { 65d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru try { 666bafd7d28fc7947f263feb7134fc8a70084357c3Zdeněk Kořán String jsonString = new String(response.data, 676bafd7d28fc7947f263feb7134fc8a70084357c3Zdeněk Kořán HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)); 68d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru return Response.success(new JSONObject(jsonString), 69d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru HttpHeaderParser.parseCacheHeaders(response)); 70d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } catch (UnsupportedEncodingException e) { 71d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru return Response.error(new ParseError(e)); 72d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } catch (JSONException je) { 73d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru return Response.error(new ParseError(je)); 74d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 75d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 76d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru} 77