13713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick/*
23713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * Copyright (C) 2011 The Android Open Source Project
33713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick *
43713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * Licensed under the Apache License, Version 2.0 (the "License");
53713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * you may not use this file except in compliance with the License.
63713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * You may obtain a copy of the License at
73713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick *
83713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick *      http://www.apache.org/licenses/LICENSE-2.0
93713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick *
103713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * Unless required by applicable law or agreed to in writing, software
113713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * distributed under the License is distributed on an "AS IS" BASIS,
123713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * See the License for the specific language governing permissions and
143713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * limitations under the License.
153713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick */
163713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick
173713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickpackage com.android.volley.toolbox;
183713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick
193713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickimport com.android.volley.NetworkResponse;
203713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickimport com.android.volley.ParseError;
213713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickimport com.android.volley.Response;
223713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickimport com.android.volley.Response.ErrorListener;
233713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickimport com.android.volley.Response.Listener;
243713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick
253713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickimport org.json.JSONArray;
263713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickimport org.json.JSONException;
273713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick
2865ba8a453a64cd8cedb176b26ab505711c46a89dFicus Kirkpatrickimport java.io.UnsupportedEncodingException;
2965ba8a453a64cd8cedb176b26ab505711c46a89dFicus Kirkpatrick
303713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick/**
313713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * A request for retrieving a {@link JSONArray} response body at a given URL.
323713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick */
333713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickpublic class JsonArrayRequest extends JsonRequest<JSONArray> {
343713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick
353713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick    /**
363713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick     * Creates a new request.
373713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick     * @param url URL to fetch the JSON from
383713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick     * @param listener Listener to receive the JSON response
393713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick     * @param errorListener Error listener, or null to ignore errors.
403713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick     */
413713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick    public JsonArrayRequest(String url, Listener<JSONArray> listener, ErrorListener errorListener) {
423713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick        super(url, null, listener, errorListener);
433713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick    }
443713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick
453713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick    @Override
463713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick    protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
473713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick        try {
4865ba8a453a64cd8cedb176b26ab505711c46a89dFicus Kirkpatrick            String jsonString =
4965ba8a453a64cd8cedb176b26ab505711c46a89dFicus Kirkpatrick                new String(response.data, HttpHeaderParser.parseCharset(response.headers));
5065ba8a453a64cd8cedb176b26ab505711c46a89dFicus Kirkpatrick            return Response.success(new JSONArray(jsonString),
5165ba8a453a64cd8cedb176b26ab505711c46a89dFicus Kirkpatrick                    HttpHeaderParser.parseCacheHeaders(response));
5265ba8a453a64cd8cedb176b26ab505711c46a89dFicus Kirkpatrick        } catch (UnsupportedEncodingException e) {
5365ba8a453a64cd8cedb176b26ab505711c46a89dFicus Kirkpatrick            return Response.error(new ParseError(e));
543713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick        } catch (JSONException je) {
553713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick            return Response.error(new ParseError(je));
563713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick        }
573713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick    }
583713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick}
59