一、简单封装
HttpInterface
/**
* 作者: 麦典威
* 修改时间:2017/12/13 22:27
* 功能: 网络请求接口
*/
public interface HttpInterface {
void sendGet(String url, Map<String, Object> map, Class c, int where);
void sendPost(String url, Map<String, Object> map, Class c, int where);
void sendJsonPost(String url, Class cRequest, Class cResponse, int where);
void uplosdFile(String url, String localPath, Class c, int where);
}
HttpCallback
/**
* 作者: 麦典威
* 修改时间:2017/12/13 22:28
* 功能: 网络请求回调接口
*/
public interface HttpCallback {
void onSuccess(Object obj, int where);
void onError(String msg, int where);
}
OkhttpCallback
/**
* 作者: 麦典威
* 修改时间:2017/12/13 22:51
* 功能: 网络请求回调类
*/
public class OkhttpCallback implements Callback {
Class c;
HttpCallback callback;
int where;
public OkhttpCallback(Class c, HttpCallback callback, int where) {
this.c = c;
this.callback = callback;
this.where = where;
}
@Override
public void onFailure(Call call, IOException e) {
callback.onError(e.toString(), where);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String json = response.body().string();
Object obj = new Gson().fromJson(json, c);
callback.onSuccess(obj, where);
}
}
OkhttpImp
/**
* 作者: 麦典威
* 修改时间:2017/12/13 22:30
* 功能: 网络请求封装工具类
*/
public class OkhttpImp implements HttpInterface {
OkHttpClient okHttpClient;
HttpCallback callback;
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
public static final MediaType MEDIA = MediaType.parse("application/octet-stream");
public OkhttpImp(HttpCallback callback) {
okHttpClient = new OkHttpClient();
this.callback = callback;
}
@Override
public void sendGet(String url, Map<String, Object> map, Class c, int where) {
Request request = new Request.Builder()
.url(url)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new OkhttpCallback(c, callback, where));
}
@Override
public void sendPost(String url, Map<String, Object> map, Class c, int where) {
FormBody.Builder builder = new FormBody.Builder();
for (String key : map.keySet()) {
Object obj = map.get(key);
builder.add(key, String.valueOf(obj));
}
RequestBody body = builder.build();
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new OkhttpCallback(c, callback, where));
}
@Override
public void sendJsonPost(String url, Class cRequest, Class cResponse, int where) {
String str = com.alibaba.fastjson.JSON.toJSONString(cRequest);
RequestBody body = RequestBody.create(JSON, str);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new OkhttpCallback(cResponse, callback, where));
}
@Override
public void uplosdFile(String url, String localPath, Class c, int where) {
File file = new File(localPath);
RequestBody body = new MultipartBody.Builder()
.addFormDataPart("file", file.getName(), RequestBody.create(MEDIA, file))
.build();
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new OkhttpCallback(c, callback, where));
}
}
NetTestAct
/**
* 作者: 麦典威
* 修改时间:2017/12/13 23:24
* 功能: 网络框架测试类
*/
public class NetTestAct extends AppCompatActivity implements HttpCallback {
private final static int RESP_TESTPOST = 1001;
OkhttpImp okhttpImp;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
okhttpImp = new OkhttpImp(this);
testPost();
}
private void testPost() {
Map map = new HashMap<String, String>();
map.put("phone", "17186769808");
map.put("key", "13d317xxxxxxxx2aee4");
okhttpImp.sendPost("http://apis.juhe.cn/mobile/get", map, PhoneNumLocBean.class, RESP_TESTPOST);
}
@Override
public void onSuccess(Object obj, int where) {
switch (where) {
case RESP_TESTPOST:
PhoneNumLocBean bean = (PhoneNumLocBean) obj;
Log.e("onSuccess", bean.toString());
break;
}
}
@Override
public void onError(String msg, int where) {
Log.d("onError", msg);
}
}
二、结合单例模式、工厂模式封装
未完待续
三、结合反射封装
未完待续
网友评论