aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/android/volley/toolbox/JsonRequest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/android/volley/toolbox/JsonRequest.java')
-rw-r--r--src/main/java/com/android/volley/toolbox/JsonRequest.java22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/main/java/com/android/volley/toolbox/JsonRequest.java b/src/main/java/com/android/volley/toolbox/JsonRequest.java
index 40877b1..f291076 100644
--- a/src/main/java/com/android/volley/toolbox/JsonRequest.java
+++ b/src/main/java/com/android/volley/toolbox/JsonRequest.java
@@ -39,7 +39,11 @@ public abstract class JsonRequest<T> extends Request<T> {
private static final String PROTOCOL_CONTENT_TYPE =
String.format("application/json; charset=%s", PROTOCOL_CHARSET);
- private final Listener<T> mListener;
+ /** Lock to guard mListener as it is cleared on cancel() and read on delivery. */
+ private final Object mLock = new Object();
+
+ // @GuardedBy("mLock")
+ private Listener<T> mListener;
private final String mRequestBody;
/**
@@ -62,9 +66,21 @@ public abstract class JsonRequest<T> extends Request<T> {
}
@Override
+ public void cancel() {
+ super.cancel();
+ synchronized (mLock) {
+ mListener = null;
+ }
+ }
+
+ @Override
protected void deliverResponse(T response) {
- if (mListener != null) {
- mListener.onResponse(response);
+ Response.Listener<T> listener;
+ synchronized (mLock) {
+ listener = mListener;
+ }
+ if (listener != null) {
+ listener.onResponse(response);
}
}