第一步:添加依赖:

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

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

最新文章

  1. Free git private repo
  2. iOS runtime的理解和应用
  3. Lucene4.1 视频学习
  4. MapReduce介绍
  5. mysql 为字段增加主键
  6. 为什么我的联想打印机M7450F换完墨粉之后打印机显示请更换墨粉盒?这是我的墨盒第一次灌粉&#183;、
  7. Notepad++ 配置java编译环境
  8. Smart210学习记录-------内存初始化
  9. js学习总结
  10. 集中式vs分布式
  11. pycharm-4.5.3 汉化教程(附汉化包)
  12. 实战:推断mysql中当前用户的连接数-分组筛选
  13. php session_start()报错 解决办法
  14. Jrebel热部署配置完整教程(IntelliJ IDEA、Jrebel、spring boot、springboot、eclipse、Tomcat)
  15. Bootstrap+Vue.js 练习入门一
  16. SQLserver2008一对多,多行数据显示在一行
  17. pycharm实用快捷键集锦
  18. Spring Boot的应用启动器
  19. docker网络调试过程
  20. CentOS 7系统关闭yum自动下载更新

热门文章

  1. 外网访问VMware(Centos7.0,NAT模式)搭建的web服务器应用
  2. IIS 程序池优化配置方案
  3. cmd中subst的使用
  4. 介绍知道的http返回的状态码
  5. 校验 url 是否以http 或者https 开头
  6. mysql怎么查看数据库中表的大小
  7. Zookeeper服务注册与发现原理浅析
  8. 2019春Python程序设计练习5(0416--0422)
  9. postman -- token全局变量
  10. CSS 按钮