参考stay老师的:造轮子系列-自己来写Http框架
- 轻量HTTP访问框架,支持GET/POST/PUT/DELETE
- 支持多线程断点续传的文件下载
- 支持json/xml预处理,调用时不需要再解析,通过泛型返回需要的对象
- 封装请求错误的代码,统一处理
- 支持Activity生命周期绑定
- 支持Timeout重传机制
// 需要建立项目依赖
dependencies {
compile 'com.google.code.gson:gson:2.6.2'
compile project(':miohttplib')
}
v2.0.0
- 封装MioRequest,HTTPURLConnection
- 支持GET/POST/PUT/DELETE
v2.0.1
- 加入多线程断点续传文件下载,支持暂停下载和进度更新
v2.0.2
- 预处理数据,直接返回对象,支持自动JSON/XML生成对象
v2.0.4
- 封装请求错误的代码,统一处理
v2.0.5
- 支持Activity生命周期绑定,通过MioRequestManager来管理所有的请求
v2.0.6
- 加入TIMEOUT重试机制,不需手动刷新
v2.0.7
- 支持单文件上传与多文件上传。
- 最近会更新。
- 设置泛型,按照Gson的要求构造类,即可自动解析json,直接返回对象
public void testHttpJsonGet() {
String url = "http://v.juhe.cn/xianxing/index?key=48cfb0f1ae6a5666274147e99b6838fa&city=beijing&type=1";
MioRequest request = new MioRequest(url, MioRequest.REQUSET_METHOD.GET, new JsonRequestListener<Xianxing>() {
@Override
public void onSuccess(Xianxing result) {
Log.i(TAG, "get result:" + result.toString());
}
@Override
public void onFaild(Exception exception) {
Log.i("miomin", "网络请求失败");
}
}.setRootKey("result"));
// 为request设置tag
request.setTag(toString());
//执行request
MioRequestManager.getInstance().excuteRequest(request);
}
public void testHttpStringGet() {
String url = "http://v.juhe.cn/xianxing/index?key=48cfb0f1ae6a5666274147e99b6838fa&city=beijing&type=1";
MioRequest request = new MioRequest(url, MioRequest.REQUSET_METHOD.GET, new StringRequestListener() {
@Override
public void onSuccess(String result) {
Log.i(TAG, "get result:" + result);
}
@Override
public void onFaild(Exception exception) {
Log.i("miomin", "网络请求失败");
}
});
// 为request设置tag
request.setTag(toString());
//执行request
MioRequestManager.getInstance().excuteRequest(request);
}
// 下面的url是需要下载的文件在服务器上的url
multiResumeDownTask =
new MioMultiResumeDownTask(MainActivity.this,
"http://192.168.253.1:8080/test.pdf", toString(),
new IMioDownLoadStateListener() {
// 这是监听MultiResumeDownloader下载过程的回调
@Override
public void OnDownLoadProcessChange(int process) {
Log.i(TAG, "process:" + process);
}
@Override
public void OnDownLoadStart(int fileLength) {
btnDown.setText("开始下载,文件长度:" + fileLength);
}
@Override
public void OnDownLoadResume(int process) {
btnDown.setText("暂停下载,下载到:" + process);
}
@Override
public void OnDownLoadFinished(File file) {
btnDown.setText("下载完成");
btnDown.setEnabled(false);
}
@Override
public void OnDownLoadFailed(String error) {
Log.i(TAG, "下载失败:" + error);
}
});
btnDown.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!multiResumeDownTask.isDownloading()) {
// 开始下载
MioRequestManager.getInstance().excuteDownTask(multiResumeDownTask);
} else {
// 暂停下载
MioRequestManager.getInstance().resumeDownTask(multiResumeDownTask);
}
}
});
@Override
protected void onDestroy() {
super.onDestroy();
// 实现request与Activity生命周期绑定
MioRequestManager.getInstance().cancelRequest(toString());
}