第一步:添加依赖:

    compile 'io.reactivex:rxandroid:1.2.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:retrofit:2.1.0'

第二步:创建HttpManager

import android.os.Build;
import okhttp3.Cache; import com.loaderman.samplecollect.constants.HttpUrlConstants;
import com.loaderman.samplecollect.utils.UiUtil; import java.io.File;
import java.io.IOException; import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import okhttp3.Response;
/**
* Created by Administrator on 2018/10/10 0010.
*/ public class HttpManager {
private static final Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
int maxAge = 60 * 5; // 在线缓存在5分钟内可读取
Request request = chain
.request()
.newBuilder()
.addHeader("User-Agent", Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE)//添加请求头
.header("Cache-Control", "public, max-age=" + maxAge)
.build();
return chain.proceed(request);
}
}; private static File httpCacheDirectory = new File(UiUtil.getContext().getCacheDir(), "mCache");
private static int cacheSize = 10 * 1024 * 1024; // 10 MiB
private static Cache cache = new Cache(httpCacheDirectory, cacheSize);
private static OkHttpClient client = new OkHttpClient.Builder()
.addNetworkInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR)
.addInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR)
.cache(cache)
.build();
private static HttpManager apiManager;
public static HttpManager getInstence() { if (apiManager == null) {
synchronized (HttpManager.class) {
if (apiManager == null) {
apiManager = new HttpManager();
}
}
}
return apiManager;
} private static IHttp httpService; public IHttp getHttpService() {
if (httpService == null) {
synchronized (new Object()) {
if (httpService == null) {
httpService = new Retrofit
.Builder()
.baseUrl(HttpUrlConstants.BASE_URL)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build().create(IHttp.class);
}
}
}
return httpService;
}
}

第三步;创建IHttp

import com.loaderman.samplecollect.constants.HttpUrlConstants;
import com.loaderman.samplecollect.model.GetDataResult;
import com.loaderman.samplecollect.model.RequestParams; import java.util.List;
import java.util.Map; import okhttp3.MultipartBody;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;
import rx.Observable; /**
* Created by Administrator on 2018/10/10 0010.
*/ public interface IHttp { @GET(HttpUrlConstants.data_url)
Observable<GetDataResult> getData2(@Query("city") String city); @Headers({"Content-Type: application/json;charset=UTF-8"})
@POST(HttpUrlConstants.data_url)
Observable<GetDataResult> getData1(@Body RequestParams params); @FormUrlEncoded
@POST(HttpUrlConstants.data_url)
Observable<GetDataResult> getData3(@Field("city") String city); @FormUrlEncoded
@POST(HttpUrlConstants.data_url)
Observable<GetDataResult> getData4(@FieldMap Map<String, String> map);
//上传头像
@Multipart
@POST(HttpUrlConstants.data_url)
Observable<GetDataResult> upLoadIcon(@Part List<MultipartBody.Part> partList); }

第四步 :URL常量管理

public interface HttpUrlConstants {
String BASE_URL="http://wthrcdn.etouch.cn/"; String data_url = "weather_mini";
}

第五步 : 代码中进行网络请求 :

示例1:

HttpManager
.getInstence()
.getHttpService()
.getData2("北京市")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<GetDataResult>() {
@Override
public void onCompleted() { } @Override
public void onError(Throwable e) {
LoggerUtil.systemOut(e.toString());
} @Override
public void onNext(GetDataResult getDataResult) {
LoggerUtil.systemOut(getDataResult.toString());
ToastUtil.showMsg(MainActivity.this, getDataResult.data.city);
}
});

示例2 :上传头像

  MultipartBody.Builder builder = new MultipartBody.Builder()
.setType(MultipartBody.FORM)//表单类型
.addFormDataPart("token", ConfigConstants.getToken(this))
.addFormDataPart("uid", ConfigConstants.getUid(this))
.addFormDataPart("sign", ConfigConstants.SIGN)
;
RequestBody imageBody = RequestBody.create(MediaType.parse("image/png"), file); //multipart/form-data image/png
builder.addFormDataPart("file", file.getName(), imageBody);//file 后台接收图片流的参数名 +".png"
List<MultipartBody.Part> parts = builder.build().parts(); HttpManager
.getInstence()
.getLearnCarService()
.upLoadIcon(parts)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<UpLoadIconEntity>() {
@Override
public void onCompleted() { } @Override
public void onError(Throwable e) { } @Override
public void onNext(UpLoadIconEntity upLoadIconEntity) { hideLoading();
}
});

到处完成网络请求步骤!!!

retrofit2+rxjava+okhttp网络请求实现的更多相关文章

  1. Retrofit2+Rxjava+OkHttp的使用和网络请求

    Retrofit2+Rxjava+OkHttp的使用和网络请求 https://blog.csdn.net/huandroid/article/details/79883895 加入Rxjava 如果 ...

  2. Android okHttp网络请求之Retrofit+Okhttp+RxJava组合

    前言: 通过上面的学习,我们不难发现单纯使用okHttp来作为网络库还是多多少少有那么一点点不太方便,而且还需自己来管理接口,对于接口的使用的是哪种请求方式也不能一目了然,出于这个目的接下来学习一下R ...

  3. kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式

    今天要说的干货是:以Kotlin,在MVP模式下(OKHttp和 Retrofit+RxJava)网络请求两种实现方式的一个小案例,希望对大家有所帮助,效果图: Retrofit是Square公司开发 ...

  4. Android okHttp网络请求之Json解析

    前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...

  5. Android okHttp网络请求之Get/Post请求

    前言: 之前项目中一直使用的Xutils开源框架,从xutils 2.1.5版本使用到最近的xutils 3.0,使用起来也是蛮方便的,只不过最近想着完善一下app中使用的开源框架,由于Xutils里 ...

  6. Android okHttp网络请求之文件上传下载

    前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...

  7. Android okHttp网络请求之缓存控制Cache-Control

    前言: 前面的学习基本上已经可以完成开发需求了,但是在项目中有时会遇到对请求做个缓存,当没网络的时候优先加载本地缓存,基于这个需求我们来学习一直okHttp的Cache-Control. okHttp ...

  8. 一步步搭建Retrofit+RxJava+MVP网络请求框架(一)

    首先,展示一下封装好之后的项目的层级结构. 1.先创建一个RetrofitApiService.java package com.xdw.retrofitrxmvpdemo.http; import ...

  9. 一步步搭建Retrofit+RxJava+MVP网络请求框架(二),个人认为这次封装比较强大了

    在前面已经初步封装了一个MVP的网络请求框架,那只是个雏形,还有很多功能不完善,现在进一步进行封装.添加了网络请求时的等待框,retrofit中添加了日志打印拦截器,添加了token拦截器,并且对Da ...

随机推荐

  1. deep_learning_Function_rnn_cell.BasicLSTMCell

    tf.nn.rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0, state_is_tuple=True): n_hidden表示神经元的个数,forge ...

  2. HAproxy企业应用,TCP/HTTP动静分离

    HAProxy的是一个免费的.开源的的tcp/http反向代理工具.负载均衡器,是一个企业非常快速和可靠的安全的解决方案,提供高可用性.高并发性,负载均衡和代理对TCP和基于HTTP的应用程序.它特别 ...

  3. c++ 类的继承和多态例子

    类的继承例子: 以上个动态银河系的制作为例,假设我们定义了一个星星的类如下: class Star { public: Star(){} ~Star(){} void Init(); void Mov ...

  4. 01-spring框架——spring概述

    Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的.Spring 的核心是控制反转(IoC)和面向切面编程(AOP).Spring 是可以 ...

  5. 11jsp

    1.JSP 1. 指令 作用:用于配置JSP页面,导入资源文件 格式:             <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %> 分类:        ...

  6. 好用的数据库压缩软件wingzip

    有时候我们导出.sql格式的数据库备份文件过大,超过了某些虚拟空间数据库支持的文件大小限制,我们没办法修改phpMyAdmin 导入MySQL数据库文件大小限制 只能通过压缩数据库来达到上传数据库的目 ...

  7. 搭建hadoop单机版

    一.准备工作 1.申请机器 1)修改配置: 申请虚拟机下来了,通过xshell连接进入, 主机名还是默认的,修改下,不然看着不习惯 >hostname 查看主机名 >vim /etc/sy ...

  8. crt执行cat命令后乱码

    cat查看二进制文件后所有命令都乱码执行reset即可恢复

  9. 安装theano时候发现报错:cannot install ''numpy'.It is a distutils installed project and thus we cannot ...

    发现我安装theano的时候需要numpy需要1.9以上版本,而我之前自带的numpy是1.8版本,所以版本有问题.根本原因是theano需要的numpy版本不符合要求,但是numpy已经安装过了,所 ...

  10. 交互式数据可视化-D3.js(三)比例尺

    线性比例尺 线性比例尺是常用比例尺常用方法有: var linear = d3.scaleLinear() - 创建一个定量的线性比例尺. linear.domain([numbers]) - 定义或 ...