28
28
import com .androidnetworking .interfaces .DownloadProgressListener ;
29
29
import com .androidnetworking .interfaces .JSONArrayRequestListener ;
30
30
import com .androidnetworking .interfaces .JSONObjectRequestListener ;
31
+ import com .androidnetworking .interfaces .ParsedRequestListener ;
31
32
import com .androidnetworking .interfaces .StringRequestListener ;
32
33
import com .androidnetworking .interfaces .UploadProgressListener ;
33
34
import com .androidnetworking .internal .ANRequestQueue ;
35
+ import com .androidnetworking .internal .GsonParserFactory ;
34
36
import com .androidnetworking .utils .Utils ;
37
+ import com .google .gson .reflect .TypeToken ;
35
38
36
39
import org .json .JSONArray ;
37
- import org .json .JSONException ;
38
40
import org .json .JSONObject ;
39
41
40
42
import java .io .File ;
41
- import java .io . IOException ;
43
+ import java .lang . reflect . Type ;
42
44
import java .util .HashMap ;
43
45
import java .util .concurrent .Executor ;
44
46
import java .util .concurrent .Future ;
@@ -97,6 +99,7 @@ public class ANRequest<T extends ANRequest> {
97
99
private JSONObjectRequestListener mJSONObjectRequestListener ;
98
100
private StringRequestListener mStringRequestListener ;
99
101
private BitmapRequestListener mBitmapRequestListener ;
102
+ private ParsedRequestListener mParsedRequestListener ;
100
103
private DownloadProgressListener mDownloadProgressListener ;
101
104
private UploadProgressListener mUploadProgressListener ;
102
105
private DownloadListener mDownloadListener ;
@@ -110,6 +113,7 @@ public class ANRequest<T extends ANRequest> {
110
113
private Executor mExecutor = null ;
111
114
private OkHttpClient mOkHttpClient = null ;
112
115
private String mUserAgent = null ;
116
+ private Type mType = null ;
113
117
114
118
public ANRequest (GetRequestBuilder builder ) {
115
119
this .mRequestType = RequestType .SIMPLE ;
@@ -212,6 +216,13 @@ public void getAsBitmap(BitmapRequestListener requestListener) {
212
216
ANRequestQueue .getInstance ().addRequest (this );
213
217
}
214
218
219
+ public void getAsParsed (TypeToken typeToken , ParsedRequestListener parsedRequestListener ) {
220
+ this .mType = typeToken .getType ();
221
+ this .mResponseAs = RESPONSE .PARSED ;
222
+ this .mParsedRequestListener = parsedRequestListener ;
223
+ ANRequestQueue .getInstance ().addRequest (this );
224
+ }
225
+
215
226
public T setDownloadProgressListener (DownloadProgressListener downloadProgressListener ) {
216
227
this .mDownloadProgressListener = downloadProgressListener ;
217
228
return (T ) this ;
@@ -297,6 +308,14 @@ public String getUserAgent() {
297
308
return mUserAgent ;
298
309
}
299
310
311
+ public Type getType () {
312
+ return mType ;
313
+ }
314
+
315
+ public void setType (Type type ) {
316
+ this .mType = type ;
317
+ }
318
+
300
319
public DownloadProgressListener getDownloadProgressListener () {
301
320
return new DownloadProgressListener () {
302
321
@ Override
@@ -420,6 +439,7 @@ public void destroy() {
420
439
mJSONArrayRequestListener = null ;
421
440
mStringRequestListener = null ;
422
441
mBitmapRequestListener = null ;
442
+ mParsedRequestListener = null ;
423
443
mDownloadProgressListener = null ;
424
444
mUploadProgressListener = null ;
425
445
mDownloadListener = null ;
@@ -435,32 +455,38 @@ public ANResponse parseResponse(ANData data) {
435
455
switch (mResponseAs ) {
436
456
case JSON_ARRAY :
437
457
try {
438
- JSONArray json = new JSONArray (Okio .buffer (data .source ).readUtf8 ());
458
+ JSONArray json = new JSONArray (Okio .buffer (data .body . source () ).readUtf8 ());
439
459
return ANResponse .success (json );
440
- } catch (JSONException | IOException e ) {
460
+ } catch (Exception e ) {
441
461
return ANResponse .failed (new ANError (e ));
442
462
}
443
463
case JSON_OBJECT :
444
464
try {
445
- JSONObject json = new JSONObject (Okio .buffer (data .source ).readUtf8 ());
465
+ JSONObject json = new JSONObject (Okio .buffer (data .body . source () ).readUtf8 ());
446
466
return ANResponse .success (json );
447
- } catch (JSONException | IOException e ) {
467
+ } catch (Exception e ) {
448
468
return ANResponse .failed (new ANError (e ));
449
469
}
450
470
case STRING :
451
471
try {
452
- return ANResponse .success (Okio .buffer (data .source ).readUtf8 ());
453
- } catch (IOException e ) {
472
+ return ANResponse .success (Okio .buffer (data .body . source () ).readUtf8 ());
473
+ } catch (Exception e ) {
454
474
return ANResponse .failed (new ANError (e ));
455
475
}
456
476
case BITMAP :
457
477
synchronized (sDecodeLock ) {
458
478
try {
459
479
return Utils .decodeBitmap (data , mMaxWidth , mMaxHeight , mDecodeConfig , mScaleType );
460
- } catch (OutOfMemoryError e ) {
480
+ } catch (Exception e ) {
461
481
return ANResponse .failed (new ANError (e ));
462
482
}
463
483
}
484
+ case PARSED :
485
+ try {
486
+ return ANResponse .success (GsonParserFactory .getInstance ().responseBodyParser (mType ).convert (data .body ));
487
+ } catch (Exception e ) {
488
+ return ANResponse .failed (new ANError (e ));
489
+ }
464
490
case PREFETCH :
465
491
return ANResponse .success (ANConstants .PREFETCH );
466
492
}
@@ -469,8 +495,8 @@ public ANResponse parseResponse(ANData data) {
469
495
470
496
public ANError parseNetworkError (ANError anError ) {
471
497
try {
472
- if (anError .getData () != null && anError .getData ().source != null ) {
473
- anError .setErrorBody (Okio .buffer (anError .getData ().source ).readUtf8 ());
498
+ if (anError .getData () != null && anError .getData ().body != null && anError . getData (). body . source () != null ) {
499
+ anError .setErrorBody (Okio .buffer (anError .getData ().body . source () ).readUtf8 ());
474
500
}
475
501
} catch (Exception e ) {
476
502
e .printStackTrace ();
@@ -495,6 +521,8 @@ public synchronized void deliverError(ANError anError) {
495
521
mBitmapRequestListener .onError (anError );
496
522
} else if (mDownloadListener != null ) {
497
523
mDownloadListener .onError (anError );
524
+ } else if (mParsedRequestListener != null ) {
525
+ mParsedRequestListener .onError (anError );
498
526
}
499
527
ANLog .d ("Delivering anError : " + toString ());
500
528
}
@@ -520,6 +548,8 @@ public void run() {
520
548
mStringRequestListener .onResponse ((String ) response .getResult ());
521
549
} else if (mBitmapRequestListener != null ) {
522
550
mBitmapRequestListener .onResponse ((Bitmap ) response .getResult ());
551
+ } else if (mParsedRequestListener != null ) {
552
+ mParsedRequestListener .onResponse (response .getResult ());
523
553
}
524
554
finish ();
525
555
}
@@ -535,6 +565,8 @@ public void run() {
535
565
mStringRequestListener .onResponse ((String ) response .getResult ());
536
566
} else if (mBitmapRequestListener != null ) {
537
567
mBitmapRequestListener .onResponse ((Bitmap ) response .getResult ());
568
+ } else if (mParsedRequestListener != null ) {
569
+ mParsedRequestListener .onResponse (response .getResult ());
538
570
}
539
571
finish ();
540
572
}
@@ -553,6 +585,8 @@ public void run() {
553
585
mStringRequestListener .onError (anError );
554
586
} else if (mBitmapRequestListener != null ) {
555
587
mBitmapRequestListener .onError (anError );
588
+ } else if (mParsedRequestListener != null ) {
589
+ mParsedRequestListener .onError (anError );
556
590
}
557
591
finish ();
558
592
ANLog .d ("Delivering cancelled : " + toString ());
0 commit comments