@@ -25,6 +25,7 @@ public class ServiceFuture<T> extends AbstractFuture<T> {
2525 * The Retrofit method invocation.
2626 */
2727 private Subscription subscription ;
28+ private boolean valueSet = false ;
2829
2930 protected ServiceFuture () {
3031 }
@@ -43,7 +44,7 @@ public static <T> ServiceFuture<T> fromResponse(final Observable<ServiceResponse
4344 .subscribe (new Action1 <ServiceResponse <T >>() {
4445 @ Override
4546 public void call (ServiceResponse <T > t ) {
46- serviceFuture .set (t .body ());
47+ serviceFuture .valueSet = serviceFuture . set (t .body ());
4748 }
4849 }, new Action1 <Throwable >() {
4950 @ Override
@@ -72,7 +73,7 @@ public void call(ServiceResponse<T> t) {
7273 if (callback != null ) {
7374 callback .success (t .body ());
7475 }
75- serviceFuture .set (t .body ());
76+ serviceFuture .valueSet = serviceFuture . set (t .body ());
7677 }
7778 }, new Action1 <Throwable >() {
7879 @ Override
@@ -104,7 +105,7 @@ public void call(T t) {
104105 if (callback != null ) {
105106 callback .success (t );
106107 }
107- serviceFuture .set (t );
108+ serviceFuture .valueSet = serviceFuture . set (t );
108109 }
109110 }, new Action1 <Throwable >() {
110111 @ Override
@@ -134,7 +135,7 @@ public void call() {
134135 if (callback != null ) {
135136 callback .success (value );
136137 }
137- serviceFuture .set (value );
138+ serviceFuture .valueSet = serviceFuture . set (value );
138139 }
139140 }, new Action1 <Throwable >() {
140141 @ Override
@@ -167,7 +168,7 @@ public void call(ServiceResponse<T> t) {
167168 if (callback != null ) {
168169 callback .success (t .body ());
169170 }
170- serviceFuture .set (t .body ());
171+ serviceFuture .valueSet = serviceFuture . set (t .body ());
171172 }
172173 }, new Action1 <Throwable >() {
173174 @ Override
@@ -200,7 +201,7 @@ protected void setSubscription(Subscription subscription) {
200201 * @return true if successfully reported; false otherwise.
201202 */
202203 public boolean success (T result ) {
203- return set (result );
204+ return valueSet = set (result );
204205 }
205206
206207 @ Override
@@ -211,6 +212,6 @@ public boolean cancel(boolean mayInterruptIfRunning) {
211212
212213 @ Override
213214 public boolean isCancelled () {
214- return subscription .isUnsubscribed ();
215+ return ! valueSet && subscription .isUnsubscribed ();
215216 }
216217}
0 commit comments