Skip to content

Commit de1d480

Browse files
committed
hzuapps#6 hzuapps#76 第6次实验
1 parent 00444f2 commit de1d480

File tree

4 files changed

+398
-0
lines changed

4 files changed

+398
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package edu.hzuapps.androidlabs.homeworks.net1414080903220.knowdev.net;
2+
3+
import com.google.gson.internal.$Gson$Types;
4+
import com.squareup.okhttp.Request;
5+
import com.squareup.okhttp.Response;
6+
7+
import java.io.IOException;
8+
import java.lang.reflect.ParameterizedType;
9+
import java.lang.reflect.Type;
10+
11+
/**
12+
* ProjectName: knowdev
13+
* PackName:edu.hzuapps.androidlabs.homeworks.net1414080903220.knowdev.net
14+
* Class describe:OKHttp请求回调类,此类的编写参考了网上的部分写法
15+
* Author: cheng
16+
* Create time: 2017/6/2 13:32
17+
*/
18+
public abstract class BaseCallback<T> {
19+
public Type mType;
20+
21+
static Type getSuperclassTypeParameter(Class<?> subclass)
22+
{
23+
Type superclass = subclass.getGenericSuperclass();//获得带有泛型的父类
24+
if (superclass instanceof Class)
25+
{
26+
throw new RuntimeException("Missing type parameter.");
27+
}
28+
ParameterizedType parameterized = (ParameterizedType) superclass;////ParameterizedType参数化类型,即泛型
29+
return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]); //getActualTypeArguments获取参数化类型的数组,泛型可能有多个
30+
}
31+
32+
33+
public BaseCallback()
34+
{
35+
mType = getSuperclassTypeParameter(getClass());
36+
}
37+
38+
39+
40+
public abstract void onBeforeRequest(Request request);
41+
42+
43+
public abstract void onFailure(Request request, Exception e) ;
44+
45+
46+
47+
public abstract void onResponse(Response response);
48+
49+
50+
public abstract void onSuccess(Response response,T t) ;
51+
52+
53+
public abstract void onError(Response response, int code, Exception e) ;
54+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
package edu.hzuapps.androidlabs.homeworks.net1414080903220.knowdev.net;
2+
3+
import android.os.Handler;
4+
import android.os.Looper;
5+
import android.util.Log;
6+
7+
import com.google.gson.Gson;
8+
import com.squareup.okhttp.Callback;
9+
import com.squareup.okhttp.FormEncodingBuilder;
10+
import com.squareup.okhttp.OkHttpClient;
11+
import com.squareup.okhttp.Request;
12+
import com.squareup.okhttp.RequestBody;
13+
import com.squareup.okhttp.Response;
14+
15+
16+
import java.io.IOException;
17+
import java.util.Map;
18+
import java.util.concurrent.TimeUnit;
19+
20+
/**
21+
* ProjectName: knowdev
22+
* PackName:edu.hzuapps.androidlabs.homeworks.net1414080903220.knowdev.net
23+
* Class describe:封装的网络请求类
24+
* Author: cheng
25+
* Create time: 2017/6/2 11:14
26+
*/
27+
public class OkHttpHelper {
28+
29+
public static final String TAG="OkHttpHelper";
30+
31+
private static OkHttpHelper okInstance;
32+
private OkHttpClient okHttpClient;
33+
private Gson gson;
34+
private Handler handler;
35+
36+
//单例模式,官方推荐的写法
37+
static {
38+
okInstance=new OkHttpHelper();
39+
}
40+
public static OkHttpHelper getOkInstance(){
41+
return okInstance;
42+
}
43+
44+
public OkHttpHelper(){
45+
okHttpClient=new OkHttpClient();
46+
okHttpClient.setConnectTimeout(10, TimeUnit.SECONDS);
47+
okHttpClient.setReadTimeout(10,TimeUnit.SECONDS);
48+
okHttpClient.setWriteTimeout(30,TimeUnit.SECONDS);
49+
gson=new Gson();
50+
handler=new Handler(Looper.getMainLooper());
51+
}
52+
53+
54+
//自定义的get方法
55+
public void get(String apiSource,String url, Map<String,String>params, BaseCallback callBack){
56+
Request request=buildRequest(apiSource,url,"GET",params);
57+
request(request,callBack);
58+
}
59+
60+
61+
//自定义的post方法
62+
public void post(String apiSource,String url, BaseCallback callBack, Map<String,String>params){
63+
Request request=buildRequest(apiSource,url,"GET",params);
64+
request(request,callBack);
65+
}
66+
67+
/**
68+
* Method: request
69+
* desription: 执行网络请求
70+
* @Param:
71+
* @return:
72+
*/
73+
public void request(final Request request,final BaseCallback callBack){
74+
callBack.onBeforeRequest(request);
75+
okHttpClient.newCall(request).enqueue(new Callback() {
76+
@Override
77+
public void onFailure(Request request, IOException e) {
78+
79+
}
80+
81+
@Override
82+
public void onResponse(Response response) throws IOException {
83+
callBack.onResponse(response);
84+
if(response.isSuccessful()){
85+
String result=response.body().string();
86+
Log.i(TAG,result);
87+
if(callBack.mType==String.class){
88+
requestSuccess(callBack,response,result);
89+
}else {
90+
91+
Object object=gson.fromJson(result,callBack.mType);
92+
requestSuccess(callBack,response,object);
93+
}
94+
}
95+
else{
96+
Looper.prepare();
97+
callBack.onError(response,response.code(),null);
98+
Looper.loop();
99+
}
100+
}
101+
});
102+
}
103+
104+
/**
105+
* Method: requestSuccess
106+
* desription: 处理请求成功后的结果
107+
* @Param:
108+
* @return:
109+
*/
110+
private void requestSuccess(final BaseCallback callback, final Response response, final Object obj ){
111+
handler.post(new Runnable() {
112+
@Override
113+
public void run() {
114+
callback.onSuccess(response,obj);
115+
}
116+
});
117+
}
118+
119+
private void callError(final BaseCallback callBack,final Response response,final Exception e ){
120+
handler.post(new Runnable() {
121+
@Override
122+
public void run() {
123+
callBack.onError(response,response.code(),e);
124+
}
125+
});
126+
}
127+
/**
128+
* Method: buildRequest
129+
* desription: 构建请求对象Request
130+
* @Param:
131+
* @return:
132+
*/
133+
private Request buildRequest(String source,String url,String type,Map<String,String>params){
134+
Request.Builder builder=new Request.Builder().url(url);
135+
if(type.equals("GET")){
136+
String encodeParams=buildGetParams(source,params);
137+
url=url+encodeParams;
138+
Log.i(TAG,url);
139+
builder.url(url);
140+
builder.get();
141+
}else if(type.equals("POST")){
142+
RequestBody requestBody=buildPostParams(params);
143+
builder.post(requestBody);
144+
}
145+
return builder.build();
146+
}
147+
148+
149+
/**
150+
* Method: buildGetParams
151+
* desription: 对get方法的参数进行格式化,由于两个是不同的接口,因此分别处理
152+
* @Param:
153+
* @return:
154+
*/
155+
private String buildGetParams(String source,Map<String,String>params){
156+
String formatParams="";
157+
if(source.equals("tx")){
158+
StringBuffer sb = new StringBuffer();
159+
for (Map.Entry<String, String> entry : params.entrySet()) {
160+
sb.append(entry.getKey() + "=" + entry.getValue());
161+
sb.append("&");
162+
}
163+
formatParams = sb.toString();
164+
if (formatParams.endsWith("&")) {
165+
formatParams = formatParams.substring(0, formatParams.length() - 1);
166+
}
167+
formatParams="?"+formatParams;
168+
}
169+
else if(source.equals("gank")){
170+
171+
for (Map.Entry<String, String> entry : params.entrySet()) {
172+
String p=entry.getValue();
173+
formatParams=formatParams+"/"+p;
174+
}
175+
}
176+
return formatParams;
177+
}
178+
179+
180+
/**
181+
* Method: buildFormParams
182+
* desription: 进行post参数的添加,暂时用不到
183+
* @Param:
184+
* @return:
185+
*/
186+
private RequestBody buildPostParams(Map<String,String>params){
187+
FormEncodingBuilder encodingBuilder=new FormEncodingBuilder();
188+
if(params!=null){
189+
for(Map.Entry<String,String>entry:params.entrySet()){
190+
encodingBuilder.add(entry.getKey(),entry.getValue());
191+
}
192+
}
193+
return encodingBuilder.build();
194+
}
195+
196+
197+
198+
199+
200+
/* public Request buildGetRequest(String url){
201+
return null;
202+
}
203+
204+
public Request buildPostRequest(String url,Map<String,String> params){
205+
return null;
206+
}*/
207+
208+
209+
210+
211+
212+
213+
214+
215+
216+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package edu.hzuapps.androidlabs.homeworks.net1414080903220.knowdev.net;
2+
3+
import android.content.Context;
4+
5+
import com.squareup.okhttp.Request;
6+
import com.squareup.okhttp.Response;
7+
import com.syd.oden.circleprogressdialog.core.CircleProgressDialog;
8+
9+
/**
10+
* ProjectName: knowdev
11+
* PackName:edu.hzuapps.androidlabs.homeworks.net1414080903220.knowdev.net
12+
* Class describe:网络请求回调类
13+
* Author: cheng
14+
* Create time: 2017/6/2 19:16
15+
*/
16+
public abstract class ResponseCallback <T> extends BaseCallback<T> {
17+
CircleProgressDialog circleProgressDialog;
18+
private Context context;
19+
public ResponseCallback(Context context){
20+
this.context=context;
21+
circleProgressDialog = new CircleProgressDialog(this.context);
22+
}
23+
24+
public void showDialog(){
25+
circleProgressDialog.setText("内容努力加载中~~~☺");
26+
circleProgressDialog.showDialog();
27+
}
28+
29+
public void closeDialog(){
30+
circleProgressDialog.dismiss();
31+
}
32+
33+
@Override
34+
public void onBeforeRequest(Request request) {
35+
showDialog();
36+
}
37+
38+
@Override
39+
public void onResponse(Response response) {
40+
closeDialog();
41+
}
42+
43+
@Override
44+
public void onFailure(Request request, Exception e) {
45+
closeDialog();
46+
}
47+
48+
49+
}

0 commit comments

Comments
 (0)