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.Request;
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 java.io.UnsupportedEncodingException;
26d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
27d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru/**
28d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * A canned request for retrieving the response body at a given URL as a String.
29d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru */
30d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Querupublic class StringRequest extends Request<String> {
31d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    private final Listener<String> mListener;
32d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
33d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    /**
34e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru     * Creates a new request with the given method.
35e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru     *
36e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru     * @param method the request {@link Method} to use
37d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru     * @param url URL to fetch the string at
38d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru     * @param listener Listener to receive the String response
39d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru     * @param errorListener Error listener, or null to ignore errors
40d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru     */
41e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru    public StringRequest(int method, String url, Listener<String> listener,
42e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru            ErrorListener errorListener) {
43e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru        super(method, url, errorListener);
44d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        mListener = listener;
45d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
46d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
47e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru    /**
48e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru     * Creates a new GET request.
49e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru     *
50e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru     * @param url URL to fetch the string at
51e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru     * @param listener Listener to receive the String response
52e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru     * @param errorListener Error listener, or null to ignore errors
53e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru     */
54e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru    public StringRequest(String url, Listener<String> listener, ErrorListener errorListener) {
55e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru        this(Method.GET, url, listener, errorListener);
56e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru    }
57e48f4430bfd3030350aa5ba827b449c37e2fadc9Jean-Baptiste Queru
58d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    @Override
59d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    protected void deliverResponse(String response) {
60d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        mListener.onResponse(response);
61d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
62d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru
63d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    @Override
64d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    protected Response<String> parseNetworkResponse(NetworkResponse response) {
65d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        String parsed;
66d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        try {
67d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru            parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
68d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        } catch (UnsupportedEncodingException e) {
69d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru            parsed = new String(response.data);
70d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        }
71d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru        return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
72d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru    }
73d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru}
74