diff options
Diffstat (limited to 'core/src/main/java/com/android/volley/toolbox/StringRequest.java')
-rw-r--r-- | core/src/main/java/com/android/volley/toolbox/StringRequest.java | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/core/src/main/java/com/android/volley/toolbox/StringRequest.java b/core/src/main/java/com/android/volley/toolbox/StringRequest.java new file mode 100644 index 0000000..df7b386 --- /dev/null +++ b/core/src/main/java/com/android/volley/toolbox/StringRequest.java @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import androidx.annotation.GuardedBy; +import androidx.annotation.Nullable; +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.Response.ErrorListener; +import com.android.volley.Response.Listener; +import java.io.UnsupportedEncodingException; + +/** A canned request for retrieving the response body at a given URL as a String. */ +public class StringRequest extends Request<String> { + + /** Lock to guard mListener as it is cleared on cancel() and read on delivery. */ + private final Object mLock = new Object(); + + @Nullable + @GuardedBy("mLock") + private Listener<String> mListener; + + /** + * Creates a new request with the given method. + * + * @param method the request {@link Method} to use + * @param url URL to fetch the string at + * @param listener Listener to receive the String response + * @param errorListener Error listener, or null to ignore errors + */ + public StringRequest( + int method, + String url, + Listener<String> listener, + @Nullable ErrorListener errorListener) { + super(method, url, errorListener); + mListener = listener; + } + + /** + * Creates a new GET request. + * + * @param url URL to fetch the string at + * @param listener Listener to receive the String response + * @param errorListener Error listener, or null to ignore errors + */ + public StringRequest( + String url, Listener<String> listener, @Nullable ErrorListener errorListener) { + this(Method.GET, url, listener, errorListener); + } + + @Override + public void cancel() { + super.cancel(); + synchronized (mLock) { + mListener = null; + } + } + + @Override + protected void deliverResponse(String response) { + Response.Listener<String> listener; + synchronized (mLock) { + listener = mListener; + } + if (listener != null) { + listener.onResponse(response); + } + } + + @Override + @SuppressWarnings("DefaultCharset") + protected Response<String> parseNetworkResponse(NetworkResponse response) { + String parsed; + try { + parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); + } catch (UnsupportedEncodingException e) { + // Since minSdkVersion = 8, we can't call + // new String(response.data, Charset.defaultCharset()) + // So suppress the warning instead. + parsed = new String(response.data); + } + return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); + } +} |