31
31
import android .os .Message ;
32
32
import android .os .Looper ;
33
33
34
- public class AsyncHttpResponseHandler extends Handler {
35
- private static final int RESPONSE_MESSAGE = 0 ;
36
- private static final int ERROR_MESSAGE = 1 ;
34
+ public class AsyncHttpResponseHandler {
35
+ private static final int SUCCESS_MESSAGE = 0 ;
36
+ private static final int FAILURE_MESSAGE = 1 ;
37
37
private static final int START_MESSAGE = 2 ;
38
38
private static final int FINISH_MESSAGE = 3 ;
39
39
40
+ private Handler handler ;
41
+
40
42
public AsyncHttpResponseHandler () {
41
- super (Looper .getMainLooper ());
43
+ // Set up a handler to post events back to the correct thread if possible
44
+ if (Looper .myLooper () != null ) {
45
+ handler = new Handler (){
46
+ public void handleMessage (Message msg ){
47
+ AsyncHttpResponseHandler .this .handleMessage (msg );
48
+ }
49
+ };
50
+ }
42
51
}
43
52
44
- public void sendStartMessage () {
45
- sendMessage (obtainMessage (START_MESSAGE ));
46
- }
47
-
48
- public void sendFinishMessage () {
49
- sendMessage (obtainMessage (FINISH_MESSAGE ));
50
- }
51
53
54
+ // Pre-processing of messages (in background thread)
52
55
public void sendResponseMessage (HttpResponse response ) {
53
56
StatusLine status = response .getStatusLine ();
54
57
if (status .getStatusCode () >= 300 ) {
55
- sendErrorMessage (new HttpResponseException (status .getStatusCode (), status .getReasonPhrase ()));
58
+ sendFailureMessage (new HttpResponseException (status .getStatusCode (), status .getReasonPhrase ()));
56
59
} else {
57
60
try {
58
- sendMessage ( obtainMessage ( RESPONSE_MESSAGE , getResponseBody (response ) ));
61
+ sendSuccessMessage ( getResponseBody (response ));
59
62
} catch (IOException e ) {
60
- sendErrorMessage (e );
63
+ sendFailureMessage (e );
61
64
}
62
65
}
63
66
}
64
67
65
- public void sendErrorMessage (Throwable e ) {
66
- sendMessage (obtainMessage (ERROR_MESSAGE , e ));
68
+ public void sendSuccessMessage (String responseBody ) {
69
+ sendMessage (obtainMessage (SUCCESS_MESSAGE , responseBody ));
70
+ }
71
+
72
+ public void sendFailureMessage (Throwable e ) {
73
+ sendMessage (obtainMessage (FAILURE_MESSAGE , e ));
74
+ }
75
+
76
+ public void sendStartMessage () {
77
+ sendMessage (obtainMessage (START_MESSAGE , null ));
78
+ }
79
+
80
+ public void sendFinishMessage () {
81
+ sendMessage (obtainMessage (FINISH_MESSAGE , null ));
82
+ }
83
+
84
+
85
+ // Pre-processing of messages (in original calling thread)
86
+ protected void handleSuccessMessage (String responseBody ) {
87
+ onSuccess (responseBody );
88
+ }
89
+
90
+ protected void handleFailureMessage (Throwable e ) {
91
+ onFailure (e );
67
92
}
68
93
69
- @ Override
70
- public void handleMessage (Message msg ) {
94
+
95
+ // Utility functions
96
+ protected void handleMessage (Message msg ) {
71
97
switch (msg .what ) {
72
- case RESPONSE_MESSAGE :
73
- handleResponseMessage ((String )msg .obj );
98
+ case SUCCESS_MESSAGE :
99
+ handleSuccessMessage ((String )msg .obj );
74
100
break ;
75
- case ERROR_MESSAGE :
76
- handleErrorMessage ((Throwable )msg .obj );
101
+ case FAILURE_MESSAGE :
102
+ handleFailureMessage ((Throwable )msg .obj );
77
103
break ;
78
104
case START_MESSAGE :
79
105
onStart ();
@@ -84,14 +110,6 @@ public void handleMessage(Message msg) {
84
110
}
85
111
}
86
112
87
- protected void handleResponseMessage (String responseBody ) {
88
- onSuccess (responseBody );
89
- }
90
-
91
- protected void handleErrorMessage (Throwable e ) {
92
- onFailure (e );
93
- }
94
-
95
113
protected String getResponseBody (HttpResponse response ) throws IOException {
96
114
HttpEntity entity = null ;
97
115
HttpEntity temp = response .getEntity ();
@@ -102,6 +120,26 @@ protected String getResponseBody(HttpResponse response) throws IOException {
102
120
return EntityUtils .toString (entity );
103
121
}
104
122
123
+ protected void sendMessage (Message msg ) {
124
+ if (handler != null ){
125
+ handler .sendMessage (msg );
126
+ } else {
127
+ handleMessage (msg );
128
+ }
129
+ }
130
+
131
+ protected Message obtainMessage (int responseMessage , Object response ) {
132
+ Message msg = null ;
133
+ if (handler != null ){
134
+ msg = this .handler .obtainMessage (responseMessage , response );
135
+ }else {
136
+ msg = new Message ();
137
+ msg .what = responseMessage ;
138
+ msg .obj = response ;
139
+ }
140
+ return msg ;
141
+ }
142
+
105
143
// Public callbacks
106
144
public void onStart () {}
107
145
public void onFinish () {}
0 commit comments