/MioHttp

Http framework / life cycle binding / pretreatment Json/xml / timeout retry / file downloading

Primary LanguageJava

MioHttp

参考stay老师的:造轮子系列-自己来写Http框架


  • 轻量HTTP访问框架,支持GET/POST/PUT/DELETE
  • 支持多线程断点续传的文件下载
  • 支持json/xml预处理,调用时不需要再解析,通过泛型返回需要的对象
  • 封装请求错误的代码,统一处理
  • 支持Activity生命周期绑定
  • 支持Timeout重传机制

Gradle

// 需要建立项目依赖
dependencies {
    compile 'com.google.code.gson:gson:2.6.2'
    compile project(':miohttplib')
}

Version

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

  • 支持单文件上传与多文件上传。
  • 最近会更新。

Usage

请求Json,直接返回对象

  • 设置泛型,按照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);
    }

返回String

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);
    }

DownloadFiles

// 下面的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);
                }
            }
        });

MioRequest与Activity生命周期绑定

@Override
    protected void onDestroy() {
        super.onDestroy();
        // 实现request与Activity生命周期绑定
        MioRequestManager.getInstance().cancelRequest(toString());
    }       

Thanks