diff options
Diffstat (limited to 'src/main/java/com/android/volley/toolbox/JsonRequest.java')
-rw-r--r-- | src/main/java/com/android/volley/toolbox/JsonRequest.java | 22 |
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); } } |