Android Retrofit Client的实践
Android Retrofit Client的简单封装
前言
Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。
使用
添加build.grade依赖
dependencies {
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
}
定义接口
public interface NetService {
@POST("getNewestVersion")
io.reactivex.Observable<ResponseBody> getAppVersion(
);
}
OkHttpUtil
public class OkHttpUtil {
private static final long CACHE_MAX_AGE = 60 * 1;
private static final long CACHE_STALE_SEC = 60 * 60 * 24;
private static final String CACHE_CONTROL_CACHE = "only-if-cached, max-stale=" CACHE_STALE_SEC;
private static final String CACHE_CONTROL_AGE = "max-age=" CACHE_MAX_AGE;
public static OkHttpUtil getInstance(){
return new OkHttpUtil();
}
public OkHttpClient getOkHttpClient(){
Cache cache = new Cache(new File(TtPhoneApplication.getInstance().getCacheDir().getAbsolutePath(),"HttpCache"),1024 * 1024 * 10);
return new OkHttpClient.Builder()
.cache(cache)
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.addInterceptor(mLoginInterceptor)
.addNetworkInterceptor(mRewriteCacheControlInterceptor)
.addInterceptor(mRewriteCacheControlInterceptor)
.build();
}
public static boolean isNetWorkAvailable(){
ConnectivityManager connectivityManager = (ConnectivityManager) TtPhoneApplication.getInstance()
.getSystemService(Context.CONNECTIVITY_SERVICE);
if(connectivityManager != null){
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if(networkInfo != null && networkInfo.isConnected()){
if(networkInfo.getState() == NetworkInfo.State.CONNECTED){
return true;
}
}
}
return false;
}
private final Interceptor mLoginInterceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
long start = System.nanoTime();
Log.i("AddLogInterceptor:", String.format("Sending request %s on %s%n%s",
request.url(), chain.connection(), request.headers()));
long end = System.nanoTime();
Response response = chain.proceed(request);
return response;
}
};
private final Interceptor mRewriteCacheControlInterceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (!isNetWorkAvailable()) {
request = request.newBuilder()
.cacheControl(CacheControl.FORCE_CACHE)
.build();
}
Response originalResponse = chain.proceed(request);
if (isNetWorkAvailable()) {
String cacheControl = request.cacheControl().toString();
return originalResponse.newBuilder()
.header("Cache-Control", cacheControl)
.removeHeader("Pragma")
.build();
} else {
return originalResponse.newBuilder()
.header("Cache-Control", "public, only-if-cached, max-stale=" CACHE_STALE_SEC)
.removeHeader("Pragma")
.build();
}
}
};
}
RetrofitUtils
public class NetWorkUtils {
private static volatile NetWorkUtils sNetWorkUtils;
private static volatile OkHttpClient sOkHttpClient;
private Retrofit mRetrofit;
private NetWorkUtils(){
mRetrofit = new Retrofit.Builder()
.baseUrl(Constans.BASE_URL)
.client(NetWorkUtils.getOkHttpClient())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
}
public static NetWorkUtils getInstance(){
if(sNetWorkUtils == null){
synchronized(NetWorkUtils.class){
if(sNetWorkUtils == null){
sNetWorkUtils = new NetWorkUtils();
}
}
}
return sNetWorkUtils;
}
public static OkHttpClient getOkHttpClient(){
if(sOkHttpClient == null){
synchronized (NetWorkUtils.class){
if(sOkHttpClient == null){
sOkHttpClient = OkHttpUtil.getInstance().getOkHttpClient();
}
}
}
return sOkHttpClient;
}
@SuppressWarnings("unchecked") // Single-interface proxy creation guarded by parameter safety.
public <T> T createService(final Class<T> service){
return mRetrofit.create(service);
}
}
参考使用
public void getAppversionRequest(){
NetWorkUtils.getInstance()
.createService(NetService.class)
.getAppVersion()
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(ResponseBody value) {
LogUtils.i("ok " value.string());
}
@Override
public void onError(Throwable e) {
LogUtils.i("look over cause of error = " e.getMessage());
}
@Override
public void onComplete() {
}
});
总结
Retrofit 使用的简单流程
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfjhfhg
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24