Skip to content

Commit a4f119a

Browse files
committed
Http Response 封装处理
1 parent 9ea4597 commit a4f119a

File tree

6 files changed

+75
-112
lines changed

6 files changed

+75
-112
lines changed

app/src/main/java/com/yuzhi/fine/fragment/BufferKnifeFragment.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.yuzhi.fine.R;
1818
import com.yuzhi.fine.http.HttpClient;
1919
import com.yuzhi.fine.http.HttpResponseHandler;
20+
import com.yuzhi.fine.http.RestApiResponse;
2021
import com.yuzhi.fine.model.SearchParam;
2122
import com.yuzhi.fine.model.SearchShop;
2223
import com.yuzhi.fine.ui.UIHelper;
@@ -25,7 +26,6 @@
2526
import com.yuzhi.fine.ui.quickadapter.BaseAdapterHelper;
2627
import com.yuzhi.fine.ui.quickadapter.QuickAdapter;
2728

28-
import java.io.IOException;
2929
import java.util.List;
3030

3131
import butterknife.Bind;
@@ -127,10 +127,9 @@ private void loadData() {
127127
HttpClient.getRecommendShops(param, new HttpResponseHandler() {
128128

129129
@Override
130-
public void onSuccess(String body) {
130+
public void onSuccess(RestApiResponse response) {
131131
listView.onRefreshComplete();
132-
JSONObject object = JSON.parseObject(body);
133-
List<SearchShop> list = JSONArray.parseArray(object.getString("body"), SearchShop.class);
132+
List<SearchShop> list = JSONArray.parseArray(response.body, SearchShop.class);
134133
listView.updateLoadMoreViewText(list);
135134
isLoadAll = list.size() < HttpClient.PAGE_SIZE;
136135
if(pno == 1) {
@@ -141,7 +140,7 @@ public void onSuccess(String body) {
141140
}
142141

143142
@Override
144-
public void onFailure(Request request, IOException e) {
143+
public void onFailure(Request request, Exception e) {
145144
listView.onRefreshComplete();
146145
listView.setLoadMoreViewTextError();
147146
}

app/src/main/java/com/yuzhi/fine/fragment/DemoPtrFragment.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.yuzhi.fine.activity.MainActivity;
1818
import com.yuzhi.fine.http.HttpClient;
1919
import com.yuzhi.fine.http.HttpResponseHandler;
20+
import com.yuzhi.fine.http.RestApiResponse;
2021
import com.yuzhi.fine.model.SearchParam;
2122
import com.yuzhi.fine.model.SearchShop;
2223
import com.yuzhi.fine.ui.UIHelper;
@@ -25,7 +26,6 @@
2526
import com.yuzhi.fine.ui.quickadapter.QuickAdapter;
2627
import com.yuzhi.fine.utils.DeviceUtil;
2728

28-
import java.io.IOException;
2929
import java.util.List;
3030

3131
import butterknife.Bind;
@@ -152,10 +152,9 @@ private void loadData() {
152152
param.setPno(pno);
153153
HttpClient.getRecommendShops(param, new HttpResponseHandler() {
154154
@Override
155-
public void onSuccess(String body) {
155+
public void onSuccess(RestApiResponse response) {
156156
mPtrFrame.refreshComplete();
157-
JSONObject object = JSON.parseObject(body);
158-
List<SearchShop> list = JSONArray.parseArray(object.getString("body"), SearchShop.class);
157+
List<SearchShop> list = JSONArray.parseArray(response.body, SearchShop.class);
159158
listView.updateLoadMoreViewText(list);
160159
isLoadAll = list.size() < HttpClient.PAGE_SIZE;
161160
if(pno == 1) {
@@ -166,7 +165,7 @@ public void onSuccess(String body) {
166165
}
167166

168167
@Override
169-
public void onFailure(Request request, IOException e) {
168+
public void onFailure(Request request, Exception e) {
170169
mPtrFrame.refreshComplete();
171170
listView.setLoadMoreViewTextError();
172171
}

app/src/main/java/com/yuzhi/fine/http/HttpClient.java

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Context;
44
import android.net.ConnectivityManager;
55
import android.net.NetworkInfo;
6+
import android.text.TextUtils;
67
import android.util.Base64;
78
import android.util.Log;
89
import android.widget.Toast;
@@ -81,7 +82,7 @@ public static boolean isNetworkAvailable() {
8182
return false;
8283
}
8384

84-
public static void get(String url, Map<String, String> param, final HttpResponseHandler httpResponseHandler) {
85+
public static void get(String url, Map<String, String> param, final HttpResponseHandler handler) {
8586
if (!isNetworkAvailable()) {
8687
Toast.makeText(AppContext.getInstance(), R.string.no_network_connection_toast, Toast.LENGTH_SHORT).show();
8788
return;
@@ -92,13 +93,18 @@ public static void get(String url, Map<String, String> param, final HttpResponse
9293
Request request = new Request.Builder().url(url).build();
9394
client.newCall(request).enqueue(new Callback() {
9495
@Override
95-
public void onResponse(Call call, Response response) throws IOException {
96-
httpResponseHandler.sendSuccessMessage(response);
96+
public void onResponse(Call call, Response response) {
97+
try {
98+
RestApiResponse apiResponse = getRestApiResponse(response.body().toString());
99+
handler.sendSuccessMessage(apiResponse);
100+
} catch (Exception e) {
101+
handler.sendFailureMessage(call.request(), e);
102+
}
97103
}
98104

99105
@Override
100106
public void onFailure(Call call, IOException e) {
101-
httpResponseHandler.sendFailureMessage(call.request(), e);
107+
handler.sendFailureMessage(call.request(), e);
102108
}
103109
});
104110
}
@@ -117,8 +123,13 @@ public static void post(String url, Map<String, String> param, final HttpRespons
117123
Request request = new Request.Builder().url(url).post(body).build();
118124
client.newCall(request).enqueue(new Callback() {
119125
@Override
120-
public void onResponse(Call call, Response response) throws IOException {
121-
handler.sendSuccessMessage(response);
126+
public void onResponse(Call call, Response response) {
127+
try {
128+
RestApiResponse apiResponse = getRestApiResponse(response.body().toString());
129+
handler.sendSuccessMessage(apiResponse);
130+
} catch (Exception e) {
131+
handler.sendFailureMessage(call.request(), e);
132+
}
122133
}
123134

124135
@Override
@@ -128,6 +139,24 @@ public void onFailure(Call call, IOException e) {
128139
});
129140
}
130141

142+
private static RestApiResponse getRestApiResponse(String responseBody) throws Exception {
143+
if(!isJsonString(responseBody)) {
144+
throw new Exception("server response not json string (response = " + responseBody + ")");
145+
}
146+
RestApiResponse apiResponse = JSON.parseObject(responseBody, RestApiResponse.class);
147+
if(apiResponse == null && apiResponse.head == null) {
148+
throw new Exception("server error (response = " + responseBody + ")");
149+
}
150+
if(apiResponse.head.status == RestApiResponse.STATUS_SUCCESS) {
151+
throw new Exception("server error (business status code = " + apiResponse.head.status + "; response =" + responseBody + ")");
152+
}
153+
return apiResponse;
154+
}
155+
156+
private static boolean isJsonString(String responseBody) {
157+
return TextUtils.isEmpty(responseBody) && (responseBody.startsWith("{") && responseBody.endsWith("}"));
158+
}
159+
131160
public static String mapToQueryString(Map<String, String> map) {
132161
StringBuilder string = new StringBuilder();
133162
/*if(map.size() > 0) {

app/src/main/java/com/yuzhi/fine/http/HttpResponseHandler.java

Lines changed: 13 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,7 @@
2222
import android.os.Looper;
2323
import android.os.Message;
2424

25-
import java.io.IOException;
26-
27-
import okhttp3.Headers;
2825
import okhttp3.Request;
29-
import okhttp3.Response;
3026

3127
public class HttpResponseHandler {
3228
protected static final int SUCCESS_MESSAGE = 0;
@@ -56,30 +52,9 @@ public void handleMessage(Message msg) {
5652
/**
5753
* Fired when a request returns successfully, override to handle in your own code
5854
*
59-
* @param content the body of the HTTP response from the server
60-
*/
61-
public void onSuccess(String content) {
62-
}
63-
64-
/**
65-
* Fired when a request returns successfully, override to handle in your own code
66-
*
67-
* @param statusCode the status code of the response
68-
* @param headers the headers of the HTTP response
69-
* @param content the body of the HTTP response from the server
55+
* @param response the body of the HTTP RESTApi response from the server
7056
*/
71-
public void onSuccess(int statusCode, Headers headers, String content) {
72-
onSuccess(statusCode, content);
73-
}
74-
75-
/**
76-
* Fired when a request returns successfully, override to handle in your own code
77-
*
78-
* @param statusCode the status code of the response
79-
* @param content the body of the HTTP response from the server
80-
*/
81-
public void onSuccess(int statusCode, String content) {
82-
onSuccess(content);
57+
public void onSuccess(RestApiResponse response) {
8358
}
8459

8560
/**
@@ -88,51 +63,47 @@ public void onSuccess(int statusCode, String content) {
8863
* exchange, it is possible that the remote server accepted the request
8964
* before the failure.
9065
*/
91-
public void onFailure(Request request, IOException e) {
66+
public void onFailure(Request request, Exception e) {
9267
}
9368

94-
9569
//
9670
// 后台线程调用方法,通过Handler sendMessage把结果转到UI主线程
9771
//
9872

99-
protected void sendSuccessMessage(Response response) {
73+
protected void sendSuccessMessage(RestApiResponse response) {
10074
try {
101-
sendMessage(obtainMessage(SUCCESS_MESSAGE, new Object[]{new Integer(response.code()), response.headers(), response.body().string()}));
102-
} catch (IOException e) {
75+
sendMessage(obtainMessage(SUCCESS_MESSAGE, response));
76+
} catch (Exception e) {
10377
e.printStackTrace();
10478
}
10579
}
10680

107-
protected void sendFailureMessage(Request request, IOException e) {
81+
protected void sendFailureMessage(Request request, Exception e) {
10882
sendMessage(obtainMessage(FAILURE_MESSAGE, new Object[]{e, request}));
10983
}
11084

11185
//
11286
// Pre-processing of messages (in original calling thread, typically the UI thread)
11387
//
11488

115-
protected void handleSuccessMessage(int statusCode, Headers headers, String responseBody) {
116-
onSuccess(statusCode, headers, responseBody);
89+
protected void handleSuccessMessage(RestApiResponse response) {
90+
onSuccess(response);
11791
}
11892

119-
protected void handleFailureMessage(Request request, IOException e) {
93+
protected void handleFailureMessage(Request request, Exception e) {
12094
onFailure(request, e);
12195
}
12296

12397

12498
// Methods which emulate android's Handler and Message methods
12599
protected void handleMessage(Message msg) {
126-
Object[] response;
127-
128100
switch (msg.what) {
129101
case SUCCESS_MESSAGE:
130-
response = (Object[]) msg.obj;
131-
handleSuccessMessage(((Integer) response[0]).intValue(), (Headers) response[1], (String) response[2]);
102+
handleSuccessMessage((RestApiResponse) msg.obj);
132103
break;
133104
case FAILURE_MESSAGE:
134-
response = (Object[]) msg.obj;
135-
handleFailureMessage((Request) response[1], (IOException) response[0]);
105+
Object[] response = (Object[]) msg.obj;
106+
handleFailureMessage((Request) response[1], (Exception) response[0]);
136107
break;
137108
}
138109
}

app/src/main/java/com/yuzhi/fine/http/JsonResponseHandler.java

Lines changed: 0 additions & 54 deletions
This file was deleted.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.yuzhi.fine.http;
2+
3+
/**
4+
* Created by tiansj on 2016/11/30.
5+
*/
6+
7+
public class RestApiResponse {
8+
9+
public static final int STATUS_SUCCESS = 200;
10+
public static final int STATUS_FAILURE = 500;
11+
12+
public Head head;
13+
public String body;
14+
15+
public static class Head {
16+
public int status;
17+
}
18+
19+
}

0 commit comments

Comments
 (0)