我已經通過this和this發帖。所以我真的同意第二篇文章,主持人不應該意識到Android的具體事情。所以我在想的是將服務層的互聯網檢查。 我正在使用Rx Java進行網絡調用,因此我可以在進行服務調用之前進行網絡檢查,所以這樣我需要手動拋出和IOException,因爲當網絡不可用時需要在視圖上顯示錯誤頁面,另一種選擇是創建自己的錯誤類沒有互聯網互聯網支票,使用MVP,RX和改造時的地點
Observable<PaginationResponse<Notification>> response = Observable.create(new Observable.OnSubscribe<PaginationResponse<Notification>>() {
@Override
public void call(Subscriber<? super PaginationResponse<Notification>> subscriber) {
if (isNetworkConnected()) {
Call<List<Notification>> call = mService.getNotifications();
try {
Response<List<Notification>> response = call.execute();
processPaginationResponse(subscriber, response);
} catch (IOException e) {
e.printStackTrace();
subscriber.onError(e);
}
} else {
//This is I am adding manually
subscriber.onError(new IOException);
}
subscriber.onCompleted();
}
});
雖然我是加入攔截OkHttpClient的另一種方式,並設置爲改造
OkHttpClient.Builder builder = new OkHttpClient().newBuilder();
builder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
if (!isNetworkConnected()) {
throw new IOException();
}
final Request.Builder builder = chain.request().newBuilder();
Request request = builder.build();
return chain.proceed(request);
}
});
現在第二個方法更可擴展的,但我不確定它會有效,因爲我會不必要地調用服務方法和call.execute( ) 方法。
任何建議應該使用哪種方式? 也是我的判斷方法的參數是
效率
可擴展性
通用:我想這同樣的邏輯可以跨越誰遵循了類似的架構,MVP和存儲庫的應用程序中使用/ DataProvider(可提供來自網絡/ db的數據)
其他建議也歡迎,如果你的人已經在使用任何其他方式。
不錯!我非常感謝你的回答,但只有幾點。你能告訴我關於最後一行的更多信息,然後決定是否需要啓動一個新的或者忽略它,所以你的意思是一旦互聯網回來,轉換圖將自己嘗試它? 另外,我對一件事情並不感到滿意,我不打網絡電話,但還有兩件事情,我如何讓我的觀點知道錯誤是互聯網,這也是可擴展的,因爲我需要處理每個網絡電話,有關編寫包裝的任何建議? –
用EDIT2標籤更新了響應 –
明白了,你可以做一個更多的編輯並解釋InternetConnects類中的接收器註銷嗎?對不起,我的延遲響應。 –