您的位置:首页 > 编程语言 > Java开发

Retrofit+RxJava+Okhttp请求网络接口,Retrofit工具类二次封装,添加OkHttp日志拦截器和缓存

2019-04-21 20:18 323 查看

依赖

implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'

不要忘记加网络权限
HttpListener

package com.indexmore.net;

public interface HttpListener {

void success(String data);

void fail(String error);
}

HttpService

package com.indexmore.net;

import java.util.Map;

import io.reactivex.Observable;
import okhttp3.ResponseBody;
import retrofit2.http.GET;
import retrofit2.http.HeaderMap;
import retrofit2.http.QueryMap;
import retrofit2.http.Url;

public interface HttpService {

@GET
Observable<ResponseBody> get(@Url String url, @HeaderMap Map<String, String> headMap,
@QueryMap Map<String, String> map);
}

HttpUtlis

package com.indexmore.net;

import android.os.Environment;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.Cache;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;

/**
* author:AbnerMing
* date:2019/4/19
*/
public class HttpUtlis {

private String baseUrl = "http://172.17.8.100";

//传递头参
private Map<String, String> headMap = new HashMap<>();

public HttpUtlis setHead(Map<String, String> headMap) {
this.headMap = headMap;
return this;
}

//get请求
public HttpUtlis get(String url, Map<String, String> map) {

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
long size = 1024 * 10;
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
return chain.proceed(request);
}
}).cache(new Cache(file, size)).build();

Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build();
HttpService service = retrofit.create(HttpService.class);
service.get(url, headMap, map)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(Disposable d) {

}

@Override
public void onNext(ResponseBody responseBody) {
try {
String data = responseBody.string();//返回的数据
mHttpListener.success(data);
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
public void onError(Throwable e) {
String message = e.getMessage();//错误的信息
mHttpListener.fail(message);

}

@Override
public void onComplete() {

}
});
return this;
}

private HttpListener mHttpListener;

public void result(HttpListener mHttpListener) {
this.mHttpListener = mHttpListener;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: