36
36
* {@link AsyncHttpClient}. The {@link #onSuccess(String)} method is
37
37
* designed to be anonymously overridden with your own response handling code.
38
38
* <p>
39
- * Additionally, you can override the {@link #onFailure(Throwable)},
39
+ * Additionally, you can override the {@link #onFailure(Throwable, String )},
40
40
* {@link #onStart()}, and {@link #onFinish()} methods as required.
41
41
* <p>
42
42
* For example:
55
55
* }
56
56
*
57
57
* @Override
58
- * public void onFailure(Throwable e) {
58
+ * public void onFailure(Throwable e, String response ) {
59
59
* // Response failed :(
60
60
* }
61
61
*
@@ -112,9 +112,20 @@ public void onSuccess(String content) {}
112
112
/**
113
113
* Fired when a request fails to complete, override to handle in your own code
114
114
* @param error the underlying cause of the failure
115
+ * @deprecated use {@link #onFailure(Throwable, String)}
115
116
*/
116
117
public void onFailure (Throwable error ) {}
117
118
119
+ /**
120
+ * Fired when a request fails to complete, override to handle in your own code
121
+ * @param error the underlying cause of the failure
122
+ * @param content the response body, if any
123
+ */
124
+ public void onFailure (Throwable error , String content ) {
125
+ // By default, call the deprecated onFailure(Throwable) for compatibility
126
+ onFailure (error );
127
+ }
128
+
118
129
119
130
//
120
131
// Pre-processing of messages (executes in background threadpool thread)
@@ -124,8 +135,8 @@ protected void sendSuccessMessage(String responseBody) {
124
135
sendMessage (obtainMessage (SUCCESS_MESSAGE , responseBody ));
125
136
}
126
137
127
- protected void sendFailureMessage (Throwable e ) {
128
- sendMessage (obtainMessage (FAILURE_MESSAGE , e ));
138
+ protected void sendFailureMessage (Throwable e , String responseBody ) {
139
+ sendMessage (obtainMessage (FAILURE_MESSAGE , new Object []{ e , responseBody } ));
129
140
}
130
141
131
142
protected void sendStartMessage () {
@@ -145,8 +156,8 @@ protected void handleSuccessMessage(String responseBody) {
145
156
onSuccess (responseBody );
146
157
}
147
158
148
- protected void handleFailureMessage (Throwable e ) {
149
- onFailure (e );
159
+ protected void handleFailureMessage (Throwable e , String responseBody ) {
160
+ onFailure (e , responseBody );
150
161
}
151
162
152
163
@@ -158,7 +169,8 @@ protected void handleMessage(Message msg) {
158
169
handleSuccessMessage ((String )msg .obj );
159
170
break ;
160
171
case FAILURE_MESSAGE :
161
- handleFailureMessage ((Throwable )msg .obj );
172
+ Object [] repsonse = (Object [])msg .obj ;
173
+ handleFailureMessage ((Throwable )repsonse [0 ], (String )repsonse [1 ]);
162
174
break ;
163
175
case START_MESSAGE :
164
176
onStart ();
@@ -193,20 +205,22 @@ protected Message obtainMessage(int responseMessage, Object response) {
193
205
// Interface to AsyncHttpRequest
194
206
void sendResponseMessage (HttpResponse response ) {
195
207
StatusLine status = response .getStatusLine ();
208
+ String responseBody = null ;
209
+ try {
210
+ HttpEntity entity = null ;
211
+ HttpEntity temp = response .getEntity ();
212
+ if (temp != null ) {
213
+ entity = new BufferedHttpEntity (temp );
214
+ }
215
+ responseBody = EntityUtils .toString (entity );
216
+ } catch (IOException e ) {
217
+ sendFailureMessage (e , null );
218
+ }
219
+
196
220
if (status .getStatusCode () >= 300 ) {
197
- sendFailureMessage (new HttpResponseException (status .getStatusCode (), status .getReasonPhrase ()));
221
+ sendFailureMessage (new HttpResponseException (status .getStatusCode (), status .getReasonPhrase ()), responseBody );
198
222
} else {
199
- try {
200
- HttpEntity entity = null ;
201
- HttpEntity temp = response .getEntity ();
202
- if (temp != null ) {
203
- entity = new BufferedHttpEntity (temp );
204
- }
205
-
206
- sendSuccessMessage (EntityUtils .toString (entity ));
207
- } catch (IOException e ) {
208
- sendFailureMessage (e );
209
- }
223
+ sendSuccessMessage (responseBody );
210
224
}
211
225
}
212
226
}
0 commit comments