Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

XMclassmate/Http

Open more actions menu
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
5 Commits
 
 

Repository files navigation

Http

版本:2.3.5
作者:西门提督
日期:2016-12-13

##技术包含:Rxjava+Retrofit2+Okhttp3+FastJson 框架支持:

普通GET请求
普通POST请求
Token失效自动刷新,续发接口
嵌套请求(比如第二个接口需要第一个接口的参数)
数组集合循环
定时操作
周期性操作
轮询请求
多异步请求并发,不按顺序返回接受
多异步请求并发,顺序返回接受
多异步请求并发,等待所有异步完成再做操作
普通上传文件
上传文件显示进度
多文件上传显示进度
普通下载
下载文件显示进度
##Http请求框架用法如下:

###1.AndroidManifest.xml添加权限:

// 访问网络权限
uses-permission android:name="android.permission.INTERNET"
// 往sdcard中写入数据的权限
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
// 在sdcard中创建/删除文件的权限
uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"

###2.Application初始化操作 @Override public void onCreate() { super.onCreate(); HttpManager.Opration.setBaseUrl("http://www.cmonbaby.com/"); // 请求路径前缀,可参考Retrofit2 HttpManager.Opration.setShowLoger(true); // 是否打印网络请求详情,可参考Okhttp3 }

###普通GET请求: public void testGet() { Subscription s = HttpHelper.Builder .builder(service.getVersion(getVersionParamas())) .before(new Action0() { // 非必需实现 @Override public void call() { // 请求之前做一些事情,周期只有一次 Log.e(" >>> ", "before(new Action0)"); } }) .loadable(this) // 可不填,请求Dialog实现 .filter(new Action1<BaseBean>() { // 非必需实现 @Override public void call(BaseBean o) { // 数据过滤,比如服务端返回200,但业务出现错误可在此进行处理 if (!o.isSuccess()) Log.e(" >>> ", o.isSuccess() + ""); } }) .callback(new HttpCallback<BaseBean>() { @Override public void onSuccess(BaseBean o) { Log.e(" >>> ", o.getData().getChangeLog()); } }) .toSubscribe(); addSubscription(s); }

###普通POST请求: public void testPost() { Subscription s = HttpHelper.Builder .builder(service.versionAction(getVersionParamas())) .before(new Action0() { // 非必需实现 @Override public void call() { // 请求之前做一些事情,周期只有一次 Log.e(" >>> ", "before(new Action0)"); } }) .loadable(this) // 可不填,请求Dialog实现 .filter(new Action1<BaseBean>() { // 非必需实现 @Override public void call(BaseBean o) { // 数据过滤,比如服务端返回200,但业务出现错误可在此进行处理 if (!o.isSuccess()) Log.e(" >>> ", o.isSuccess() + ""); } }) .callback(new HttpCallback<BaseBean>() { @Override public void onSuccess(BaseBean o) { Log.e(" >>> ", o.getData().getChangeLog()); } }) .toSubscribe(); addSubscription(s); }

###当某些请求需要携带Token,而Token失效自动刷新再续发原请求: public void testToken() { Subscription s = TokenHelper.Builder .builder(service.loginReward(mToken, testUrl1), service.login(testUrl2, "simon@cmonbaby.com", "123456")) .before(new Action0() { // 非必需实现 @Override public void call() { // 请求之前做一些事情,周期只有一次 Log.e(" before >>> ", "before(new Action0)"); } }) .loadable(this) // 可不填,请求Dialog实现 .retryCount(3) // 非必需重写,默认3次请求失败重试 .tokenFilter(new TokenAction<BaseHttpEntity, BaseHttpEntity>() { @Override public Observable<BaseHttpEntity> call(BaseHttpEntity token) { // token自动刷新后,得到token再返回续发请求接口 mToken = token.getData().getXauthToken(); Log.e("token >>> ", mToken); return service.loginReward(mToken, testUrl1); } }) .actionFilter(new Action1<BaseHttpEntity>() { // 非必需实现 @Override public void call(BaseHttpEntity info) { // 数据过滤,比如服务端返回200,但业务出现错误可在此进行处理 if (!info.isSuccess()) Log.e("actionFilter >>> ", info.getErr()); } }) .callback(new HttpCallback<BaseHttpEntity>() { @Override public void onSuccess(BaseHttpEntity info) { // 最终请求返回数据 Log.e("callback >>> ", info.getData().toString()); } }) .toSubscribe(); addSubscription(s); }

###嵌套请求(比如第二个接口需要第一个接口的参数) public void nesting() { Subscription s = NestingHelper.Builder .builder(service.login(testUrl2, "simon@cmonbaby.com", "123456"), service.loginReward(mToken, testUrl1)) .before(new Action0() { // 非必需实现 @Override public void call() { // 请求之前做一些事情,周期只有一次 Log.e(" >>> ", "before(new Action0)"); } }) .loadable(this) // 可不填,请求Dialog实现 .nestingCall(new NestingFunction<BaseHttpEntity, BaseHttpEntity>() { @Override public Observable<BaseHttpEntity> call(BaseHttpEntity token) { Log.e("token >>> ", token.getData().getXauthToken()); // 得到第一个接口数据返回 mToken = token.getData().getXauthToken(); // 请求第二个接口 return service.loginReward(mToken, testUrl1); } }) .toFilter(new Action1<BaseHttpEntity>() { // 非必需实现 @Override public void call(BaseHttpEntity info) { // 数据过滤,比如服务端返回200,但业务出现错误可在此进行处理 if (!info.isSuccess()) Log.e("toFilter >>> ", info.getErr()); } }) .callback(new HttpCallback<BaseHttpEntity>() { @Override public void onSuccess(BaseHttpEntity info) { // 第二个接口数据返回 Log.e("callback >>> ", info.getData().toString()); } }) .toSubscribe(); addSubscription(s); }

###数组、集合的遍历 public void list() { String[] names = {"张三", "李四", "王五", "赵六", "钱七"}; Observable .from(names) .subscribe(new Action1() {

            @Override
            public void call(String name) {
                Log.e("list >>> ", name);
            }
        });
}

###定时操作 public void timer() { Observable.timer(2, TimeUnit.SECONDS) .subscribe(new Observer() {

            @Override
            public void onCompleted() {
                Log.e ("timer >>> ", "completed");
            }

            @Override
            public void onError(Throwable e) {
                Log.e("timer >>> ", "error");
            }

            @Override
            public void onNext(Long number) {
                Log.e ("timer >>> ", "hello world");
            }
        });
}

###周期性操作 public void cycle() { Observable.interval(2, TimeUnit.SECONDS) .subscribe(new Observer() {

            @Override
            public void onCompleted() {
                Log.e ("cycle >>> ", "completed");
            }

            @Override
            public void onError(Throwable e) {
                Log.e("cycle >>> ", "error");
            }

            @Override
            public void onNext(Long number) {
                Log.e ("cycle >>> ", "hello world");
            }
        });
}

###轮询请求 public void polling() { Observable.create(new Observable.OnSubscribe<BaseBean>() { @Override public void call(final Subscriber<? super BaseBean> observer) { Schedulers.newThread().createWorker() .schedulePeriodically(new Action0() { @Override public void call() { Log.e("polling >>> ", "polling"); } }, 3000, 5000, TimeUnit.MILLISECONDS); } // 首次执行行动之前等待, 执行动作之间等待的时间间隔 }).subscribe(new HttpCallback<BaseBean>() { @Override public void onSuccess(BaseBean bean) { Log.e("polling >>> ", bean.getData().getChangeLog()); } }); }

###多异步请求并发,不按顺序返回接受 public void merge() { // 拼接两个Observable的输出,不保证顺序,按照事件产生的顺序发送给订阅者 Subscription s = Merge2Helper.Builder.builder(service.versionAction(getVersionParamas()), service.login(testUrl2, "simon@cmonbaby.com", "123456")) .loadable(this) // 可不填,请求Dialog实现 .before(new Action0() { // 非必需实现 @Override public void call() { // 请求之前做一些事情,周期只有一次 Log.e("before >>> ", "before"); } }) .result1(new Action1<BaseBean>() { @Override public void call(BaseBean version) { // 第一个接口返回 Log.e("result1 >>> ", version.getData().getChangeLog()); } }) .result2(new Action1<BaseHttpEntity>() { @Override public void call(BaseHttpEntity token) { // 第二个接口返回 Log.e("result2 >>> ", token.getData().getXauthToken()); } }) .toSubscribe(); addSubscription(s); }

多异步请求并发,顺序返回接受

public void concat() {
    Subscription s = Concat2Helper.Builder.builder(service.versionAction(getVersionParamas()), service.login(testUrl2, "li_ai@baxter.com", "123456"))
        .loadable(this) // 可不填,请求Dialog实现
        .before(new Action0() { // 非必需实现
            @Override
            public void call() {
                // 请求之前做一些事情,周期只有一次
                Log.e("before >>> ", "before");
            }
        })
        .result1(new Action1<BaseBean<VersionEntity>>() {
            @Override
            public void call(BaseBean<VersionEntity> version) {
                // 第一个接口返回
                Log.e("result1 >>> ", version.getData().getChangeLog());
            }
        })
        .result2(new Action1<BaseHttpEntity<TokenEntity>>() {
            @Override
            public void call(BaseHttpEntity<TokenEntity> token) {
                // 第二个接口返回
                Log.e("result2 >>> ", token.getData().getXauthToken());
            }
        })
        .toSubscribe();
    addSubscription(s);
}

###多异步请求并发,等待所有异步完成再做操作 public void zip() { Subscription s = Zip2Helper.Builder.builder(service.versionAction(getVersionParamas()), service.login(testUrl2, "simon@cmonbaby.com", "123456"), String.class) .loadable(this) // 可不填,请求Dialog实现 .before(new Action0() { // 非必需实现 @Override public void call() { // 请求之前做一些事情,周期只有一次 Log.e("before >>> ", "before"); } }) .result1(new Action1<BaseBean>() { @Override public void call(BaseBean version) { // 第一个接口返回 Log.e("result1 >>> ", version.getData().getChangeLog()); } }) .result2(new Action1<BaseHttpEntity>() { @Override public void call(BaseHttpEntity token) { // 第二个接口返回 Log.e("result2 >>> ", token.getData().getXauthToken()); } }) .result(new Func2<BaseBean, BaseHttpEntity, String>() { @Override public String call(BaseBean version, BaseHttpEntity token) { // 得到第一个,第二个接口返回后,执行第三个接口 Log.e("result >>> ", version.getData().getChangeLog() + "\n" + token.getData().getXauthToken()); return version.getData().getChangeLog() + "\n" + token.getData().getXauthToken(); } }) .callback(new HttpCallback() { @Override public void onSuccess(String s) { // 第三个接口数据返回 Log.e("callback >>> ", s); } }) .toSubscribe(); addSubscription(s); }

###普通上传文件 public void testUpload() { String url = "http://www.cmonbaby.com/image"; String path = Environment.getExternalStorageDirectory().getAbsolutePath(); File file = new File(path + "/" + "simon.jpg"); RequestBody body = RequestBody.create(MediaType.parse("image/jpeg"), file); MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), body); service.uploadFile(url, getVersionParamas(), part) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(AndroidSchedulers.mainThread()) .subscribe(new HttpCallback<BaseBean>() { @Override public void onSuccess(BaseBean version) { // 上传完成 Log.e("simon >>> ", version.getData().getName()); } }); }

###上传文件显示进度 public void testUploadProgress() { final String url = "http://www.cmonbaby.com/image"; Subscription s = UploadFile.Builder.upload(VersionService.class, service.uploadFile(null, null, null)) .loadable(this) // 可不填,请求Dialog实现 .dialogTitle("图片上传") // 可不填 .dialogContent("正在上传……") // 可不填 .fileType("image/jpeg") // 可不填 .fileParams("file") // 可不填 .filePath(Environment.getExternalStorageDirectory().getAbsolutePath() + "/testUpload.jpg") // 测试路径 .requestService(new UploadFileCall<BaseBean, VersionService>() { @Override public Observable<BaseBean> uploadFile(VersionService service, MultipartBody.Part part) { return service.uploadFile(url, getVersionParamas(), part); } }) .before(new Action0() { // 可不实现 @Override public void call() { // 请求之前做一些事情,周期只有一次 Log.e("before >>> ", "init something"); } }) .progressListener(new ProgressListener() { // 上传进度监听 @Override public void onProgress(long progress, long total, boolean isFinish) { // 可不实现 Log.e("progress >>> ", progress + " / " + total + " --- " + isFinish); } }) .filter(new Action1<BaseBean>() { // 可不实现 @Override public void call(BaseBean version) { // 数据过滤,比如服务端返回200,但业务出现错误可在此进行处理 Log.e("filter >>> ", version.getData().getName()); } }) .callback(new HttpCallback<BaseBean>() { @Override public void onSuccess(BaseBean version) { // 上传完成 Log.e("callback >>> ", version.getData().getName()); } }) .toSubscribe(); addSubscription(s); }

###多文件上传显示进度 public void testUploadFiles() { final String url = "http://www.cmonbaby.com/images"; String path = Environment.getExternalStorageDirectory().getAbsolutePath(); Subscription s = UploadFiles.Builder.uploadFiles(VersionService.class, service.uploadFiles(null, null, null)) .loadable(this) // 可不填,请求Dialog实现 .dialogTitle("图片上传") // 可不填 .dialogContent("正在上传……") // 可不填 .fileParams("files") // 可不填 .files(new File(path + "/" + "simon.jpg")) // 测试路径1 .files(new File(path + "/" + "testUpload.jpg")) // 测试路径2 .files(new File(path + "/" + "temp.jpg")) // 测试路径3 .requestService(new UploadFilesCall<BaseListBean, VersionService>() { @Override public Observable<BaseListBean> uploadFiles(VersionService service, Map<String, RequestBody> requestBodyMap) { return service.uploadFiles(url, requestBodyMap, getVersionParamas()); } }) .before(new Action0() { // 可不实现 @Override public void call() { // 请求之前做一些事情,周期只有一次 Log.e("before >>> ", "init something"); } }) .progressListener(new ProgressListener() { // 上传进度监听 @Override public void onProgress(long progress, long total, boolean isFinish) { // 可不实现 Log.e("progress >>> ", progress + " / " + total + " --- " + isFinish); } }) .filter(new Action1<BaseListBean>() { // 可不实现 @Override public void call(BaseListBean version) { // 数据过滤,比如服务端返回200,但业务出现错误可在此进行处理 Log.e("filter >>> ", version.getData().size() + ""); } }) .callback(new HttpCallback<BaseListBean>() { @Override public void onSuccess(BaseListBean version) { // 上传完成 Log.e("callback >>> ", version.getData().size() + ""); } }) .toSubscribe(); addSubscription(s); }

###普通下载 public void testDown() { String url = "http://www.cmonbaby.com/download/http-2.3.5.apk"; service.downloadFile(url) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(AndroidSchedulers.mainThread()) .subscribe(new HttpCallback<Response>() { @Override public void onSuccess(Response response) { // 下载完成,流的写入代码此处省略 Log.e("simon >>> ", response.body().toString()); } }); }

###下载文件显示进度 public void testDownProgress() { final String url = "http://www.cmonbaby.com/download/http-2.3.5.apk"; Subscription s = DownloadFile.Builder.download(VersionService.class) .loadable(this) // 可不填,请求Dialog实现 .dialogTitle("文件下载") // 可不填 .dialogContent("文件下载中,请稍候……") // 可不填 .responseService(new DownLoadCall() { @Override public Observable<Response> downloadFile(VersionService service) { return service.downloadFile(url); } }) .before(new Action0() { // 可不实现 @Override public void call() { // 请求之前做一些事情,周期只有一次 Log.e("before >>> ", "init something"); } }) .progressListener(new ProgressListener() { // 下载进度监听 @Override public void onProgress(long progress, long total, boolean isFinish) { Log.e("progress >>> ", progress + " / " + total + " --- " + isFinish); } }) .filter(new Action1<Response>() { // 可不实现 @Override public void call(Response response) { // 数据过滤,比如服务端返回200,但业务出现错误可在此进行处理 Log.e("filter >>> ", response.body().toString()); } }) .callback(new HttpCallback<Response>() { @Override public void onSuccess(Response response) { // 下载完成,流的写入代码此处省略 Log.e("callback >>> ", response.body().toString()); } }) .toSubscribe(); addSubscription(s); }

About

Http请求框架

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.