retrofit+rxjava簡單實現網路訪問
首先需要新增一些依賴
compile 'io.reactivex:rxandroid:1.2.0'
compile 'io.reactivex:rxjava:1.1.5'
compile 'com.google.code.gson:gson:2.4'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:converter-jackson:2.0.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
compile 'com.squareup.okhttp3:okhttp:3.0.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.0.1'
compile 'com.squareup.okio:okio:1.6.0'
然後自定義封裝一個網路訪問的類
public class NetManager {
private NetService mNetService;
/**
* 設快取有效期為兩天
*/
private static final long CACHE_STALE_SEC = 60 * 60 * 24 * 2;
/**
* 查詢快取的Cache-Control設定,為if-only-cache時只查詢快取而不會請求伺服器,max-stale可以配合設定快取失效時間
* max-stale 指示客戶機可以接收超出超時期間的響應訊息。如果指定max-stale訊息的值,那麼客戶機可接收超出超時期指定值之內的響應訊息。
*/
private static final String CACHE_CONTROL_CACHE = "only-if-cached, max-stale=" + CACHE_STALE_SEC;
/**
* 查詢網路的Cache-Control設定,頭部Cache-Control設為max-age=0
* (假如請求了伺服器並在a時刻返回響應結果,則在max-age規定的秒數內,瀏覽器將不會發送對應的請求到伺服器,資料由快取直接返回)時則不會使用快取而請求伺服器
*/
private static final String CACHE_CONTROL_AGE = "max-age=0";
private static volatile OkHttpClient sOkHttpClient;
private static SparseArray<NetManager> sRetrofitManager = new SparseArray<>(HostType.TYPE_COUNT);
public NetManager(int hostType){
Retrofit retrofit = new Retrofit.Builder().baseUrl(URLConstants.getHost(hostType))
.client(getOkHttpClient()).addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build();
mNetService=retrofit.create(NetService.class);//生成不同的service
}
private OkHttpClient getOkHttpClient() {
if (sOkHttpClient == null) {
synchronized (NetManager.class) {
Cache cache = new Cache(new File(App.getAppContext().getCacheDir(), "HttpCache"),
1024 * 1024 * 100);
if (sOkHttpClient == null) {
sOkHttpClient = new OkHttpClient.Builder().cache(cache)
.connectTimeout(6, TimeUnit.SECONDS)
.readTimeout(6, TimeUnit.SECONDS)
.writeTimeout(6, TimeUnit.SECONDS)
.addInterceptor(mRewriteCacheControlInterceptor)
.addNetworkInterceptor(mRewriteCacheControlInterceptor)
.addInterceptor(mLoggingInterceptor).build();
}
}
}
return sOkHttpClient;
}
/**
* 雲端響應頭攔截器,用來配置快取策略
* Dangerous interceptor that rewrites the server's cache-control header.
*/
private final Interceptor mRewriteCacheControlInterceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (!NetUtil.isNetworkAvailable()) {
request = request.newBuilder()
.cacheControl(CacheControl.FORCE_CACHE)
.build();
Log.d("net","no network");
}
Response originalResponse = chain.proceed(request);
if (NetUtil.isNetworkAvailable()) {
//有網的時候讀介面上的@Headers裡的配置,你可以在這裡進行統一的設定
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();
}
}
};
private final Interceptor mLoggingInterceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Log.e("net",request.url()+"");
long t1 = System.nanoTime();
Log.i("net",String.format("Sending request %s on %s%n%s", request.url(), chain.connection(), request.headers()));
Response response = chain.proceed(request);
long t2 = System.nanoTime();
Log.i("net",String.format(Locale.getDefault(), "Received response for %s in %.1fms%n%s",
response.request().url(), (t2 - t1) / 1e6d, response.headers()));
return response;
}
};
/**
* @param hostType NETEASE_NEWS_VIDEO:1 (新聞,視訊),GANK_GIRL_PHOTO:2(圖片新聞);
* EWS_DETAIL_HTML_PHOTO:3新聞詳情html圖片)
* 獲取不同的Service
*/
public static NetService getDefault(int hostType)
{
NetManager netManager = sRetrofitManager.get(hostType);
if (netManager == null)
{
netManager = new NetManager(hostType);
sRetrofitManager.put(hostType, netManager);
}
return netManager.mNetService;
}
/**
* 根據網路狀況獲取快取的策略
*/
@NonNull
private String getCacheControl() {
return NetUtil.isNetworkAvailable() ? CACHE_CONTROL_AGE : CACHE_CONTROL_CACHE;
}
}
定義一個介面的樣式
public interface NetService {
/**
* 載入圖片地址
*/
@GET("data/福利/{pageCount}/{page}")
Observable<PhotoEntity> getPhotoList(@Path("pageCount") int pageCount, @Path("page") int page);
}
最後進行網路訪問
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Observable<PhotoEntity> observable= NetManager.getDefault(HostType.GANK_GIRL_PHOTO).getPhotoList(10, 1).compose(TransformUtils.<PhotoEntity>defaultSchedulers());
observable.subscribe(new NetBaseSubscriber<PhotoEntity>(getApplicationContext()) {
@Override
public void onStart() {
super.onStart();
}
@Override
public void onCompleted() {
super.onCompleted();
}
@Override
public void onError(Throwable e) {
super.onError(e);
}
@Override
public void onNext(PhotoEntity photoEntity) {
super.onNext(photoEntity);
textView.setText(photoEntity.toString());
}
});
}
});
相關推薦
retrofit+rxjava簡單實現網路訪問
首先需要新增一些依賴 compile 'io.reactivex:rxandroid:1.2.0' compile 'io.reactivex:rxjava:1.1.5' compile 'com.google.code.gson:
Retrofit + Rxjava + RxAndroid實現網路請求
之前自己實現了一個新聞類閱讀APP,最近想使用當下流行的Retrofit + Rxjava + RxAndroid + MVP架構來重構一下,本文以每日一文作為資料來源API做一個簡單的示例,來介紹一下如何使用Retrofit + Rxjava + RxAndr
Retrofit+RxJava 簡單介紹
服務器 eight ons 內存 ret square blog base range Retrofit 是一個當前很流行的網絡請求庫 想使用它首先在gradle文件中引用 compile ‘com.squareup.retrofit2:retrofit:2.1
OKhttp、RXjava與retrofit的網路訪問使用
兩個月沒有寫微博了,無論如何,現在再次迴歸Android的打怪升級。 關於Rxjava的學習和介紹,有興趣的可以去雲盤中提取pdf資料,這裡不做詳解,地址和提取碼如下:連結:http://pan.baidu.com/s/1skDOjN3 密碼: ajv7。 要想
Android 基於Retrofit+Rxjava搭建的簡單易用的網路架構
裝逼開始之前,為大家推薦兩篇文章,用來更好的學習Retrofit和Rxjava。在這裡我們要感謝網際網路裝逼行業勇於獻身,甘於奉獻的的大嬸們。我僅代表個人,給您們跪舔了。 ---------------這是分割線--------------- 首先配置支援的gradl
Android:RxJava 結合 Retrofit 優雅實現 網路請求輪詢
前言 Rxjava,由於其基於事件流的鏈式呼叫、邏輯簡潔 & 使用簡單的特點,深受各大 Android開發者的歡迎。 RxJava如此受歡迎的原因,在於其提供了豐富 & 功能強大的操作符,幾乎能完成所有的功能需求 今天,我將為
Retrofit + RxJava + OkHttp 讓網路請求變的簡單-封裝篇
前面一篇文章講了一下Retrofit+ RxJava 請求網路的一些基本用法,還沒有看過的可以去看一下Retrofit + RxJava + OkHttp 讓網路請求變的簡單-基礎篇,正如標題所說的,Retrofit+RxJava 是讓我們的網路請求變得簡單,程式碼精簡
簡單實現斷點續傳+MVP+Retrofit+RxJava
依賴: compile 'com.squareup.retrofit2:retrofit:2.0.1' compile 'com.squareup.retrofit2:converter-gson:2.0.1' compile 'com.s
Retrofit 2.0關於get和post的網路訪問的簡單使用
Retrofit 2.0已經發布很久了,由於個人原因,現在才稍有接觸。其他地方關於這個框架的中文介紹都只是之言片語。使得學習起來比較麻煩一些。一般來說這種比較強大的框架,學習起來都有一些難度,有時候也只運用它的一個功能模組。最近由於工作需要我學習使用了這個框架來進行網路的g
Retrofit+Rxjava 網路請求的簡單封裝(一)(觀察者模式)
我通過公司一個上線App介面來進行Retrofit+Rxjava 的簡單學習 http://x-phone.cn/api/v1.0/DeletePrivateContact 當然你直接訪問上面的url是無法獲取伺服器Json資料的,因為是需要封裝請求體,
Android:RxJava 結合 Retrofit 全面實現 網路請求出錯重連
前言 Rxjava,由於其基於事件流的鏈式呼叫、邏輯簡潔 & 使用簡單的特點,深受各大 Android開發者的歡迎。 RxJava如此受歡迎的原因,在於其提供了豐富 & 功能強大的操作符,幾乎能完成所有的功能需求 今天,我將為
Retrofit+RxJava+Okhttp簡單實現登入註冊
首先匯入依賴: compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包 compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4
JSP簡單實現統計網頁訪問次數
setattr cat app spa int 應用 簡單 jsp 頁面 JSP簡單實現統計網頁訪問次數 需求:統計網頁的訪問次數 核心思想:利用application對象,將訪問次數的信息放入application對象中,每次訪問就+1。這裏利用了application對
AutoCompleteTextView+Okhttp3+ListView實現簡單的網路資料搜尋展示
首先用OKHttp3獲取網路上的資料,並儲存到Serializeable的Bean類集合 OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder()
Android RxJava 實戰系列:優雅實現 網路請求巢狀回撥
轉自-----http://blog.csdn.net/carson_ho/article/details/78315696,請為大神打call 前言 Rxjava,由於其基於事件流的鏈式呼叫、邏輯簡潔 & 使用簡單的特點,深受各大 Android
Android RxJava 實戰講解:優雅實現 網路請求輪詢
轉自-----http://blog.csdn.net/carson_ho/article/details/78256466 前言 Rxjava,由於其基於事件流的鏈式呼叫、邏輯簡潔 & 使用簡單的特點,深受各大 Android開發者的歡迎。
阿里雲部署django實現公網訪問 SSH實現遠端控制 linux rhel7下安裝python django初探-建立簡單的部落格系統(一) django初探-建立簡單的部落格系統(二)
本博的主要目的是對阿里雲部署django實現公網訪問進行一次簡單的記錄,方便日後查詢。 內容目錄: (1)申請阿里雲伺服器及安全組配置 (2)實現ssh遠端控制 (3)實現ftp檔案傳輸 (4)安裝python3,在centos下同時使用python2和python3
CNN卷積神經網路簡單實現模型
這是基於Mnist手寫識別的資料訓練的一個簡單的CNN卷積神經網路,可以直接在網上下載訓練資料集,但是經常會出現連線不到伺服器的提示,所以我下到本地進行資料的載入,下面程式碼的資料載入有問題,所以自己找了一些程式碼整出來了這個資料載入的辦法,連結為:https://blog.csdn.net/lxi
pytorch筆記:05)UNet網路簡單實現
語義分割的相關介紹可參考該部落格: https://blog.csdn.net/u012931582/article/details/70314859 程式碼參考圖1設計,黑色加粗的標註是筆者新增的,和程式碼中的變數對應 圖1 Unet
Retrofit+Rxjava+MVP網路請求框架
導言: 之前有套基於MVP的網路請求框架,是okhttp封裝的,後來由於retrofit,rxJava的流行,所以更改一部分來使用 釋義: retrofit:基於okhttp再次封裝的網路請求框架 rxjava:非同步工具庫,handler+thread->asyctask-&