diff options
author | Brett Chabot <brettchabot@google.com> | 2014-11-20 13:14:44 -0800 |
---|---|---|
committer | Brett Chabot <brettchabot@google.com> | 2015-02-27 16:17:10 -0800 |
commit | 58f9c05b9ad88512bd4da9d8e27df2e834a06b38 (patch) | |
tree | df5f697959a82a5c7596b9835965d005d13639ba /src/main/java/com/android | |
parent | b76acd0e19d0ab0a579545e4f2b6a14e7c473303 (diff) | |
download | volley-58f9c05b9ad88512bd4da9d8e27df2e834a06b38.tar.gz |
Add a RequestFinishedListener to RequestQueue.
Change-Id: I51a1beacea4e448e71b7e9c3ec580165d799994a
Diffstat (limited to 'src/main/java/com/android')
-rw-r--r-- | src/main/java/com/android/volley/RequestQueue.java | 33 | ||||
-rw-r--r-- | src/main/java/com/android/volley/ServerError.java | 1 |
2 files changed, 33 insertions, 1 deletions
diff --git a/src/main/java/com/android/volley/RequestQueue.java b/src/main/java/com/android/volley/RequestQueue.java index 5c0e7af..4324590 100644 --- a/src/main/java/com/android/volley/RequestQueue.java +++ b/src/main/java/com/android/volley/RequestQueue.java @@ -19,9 +19,11 @@ package com.android.volley; import android.os.Handler; import android.os.Looper; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; +import java.util.List; import java.util.Map; import java.util.Queue; import java.util.Set; @@ -37,6 +39,12 @@ import java.util.concurrent.atomic.AtomicInteger; */ public class RequestQueue { + /** Callback interface for completed requests. */ + public static interface RequestFinishedListener<T> { + /** Called when a request has finished processing. */ + public void onRequestFinished(Request<T> request); + } + /** Used for generating monotonically-increasing sequence numbers for requests. */ private AtomicInteger mSequenceGenerator = new AtomicInteger(); @@ -86,6 +94,9 @@ public class RequestQueue { /** The cache dispatcher. */ private CacheDispatcher mCacheDispatcher; + private List<RequestFinishedListener> mFinishedListeners = + new ArrayList<RequestFinishedListener>(); + /** * Creates the worker pool. Processing will not begin until {@link #start()} is called. * @@ -261,11 +272,16 @@ public class RequestQueue { * <p>Releases waiting requests for <code>request.getCacheKey()</code> if * <code>request.shouldCache()</code>.</p> */ - void finish(Request<?> request) { + <T> void finish(Request<T> request) { // Remove from the set of requests currently being processed. synchronized (mCurrentRequests) { mCurrentRequests.remove(request); } + synchronized (mFinishedListeners) { + for (RequestFinishedListener<T> listener : mFinishedListeners) { + listener.onRequestFinished(request); + } + } if (request.shouldCache()) { synchronized (mWaitingRequests) { @@ -283,4 +299,19 @@ public class RequestQueue { } } } + + public <T> void addRequestFinishedListener(RequestFinishedListener<T> listener) { + synchronized (mFinishedListeners) { + mFinishedListeners.add(listener); + } + } + + /** + * Remove a RequestFinishedListener. Has no effect if listener was not previously added. + */ + public <T> void removeRequestFinishedListener(RequestFinishedListener<T> listener) { + synchronized (mFinishedListeners) { + mFinishedListeners.remove(listener); + } + } } diff --git a/src/main/java/com/android/volley/ServerError.java b/src/main/java/com/android/volley/ServerError.java index 70a9fd5..97cb1c6 100644 --- a/src/main/java/com/android/volley/ServerError.java +++ b/src/main/java/com/android/volley/ServerError.java @@ -32,3 +32,4 @@ public class ServerError extends VolleyError { super(); } } + |