서버에 액세스하기 위해 POST 요청을 사용했으며 서버에서 데이터를 가져 오는 동안 서버에 데이터를 보내지 마십시오.Retrofit + Okhttp.HTTP 504 요청할 수없는 요청 (캐시 된 경우에만)
@POST("Index/getListShopsInfo") Observable<ShopList> getListShopsInfo();
와 나는 내 데이터에 대한 로컬 캐시를 추가 할.
public class CacheInterceptor implements Interceptor {
private Context mContext;
public CacheInterceptor(Context context) {
mContext = context;
}
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
boolean netAvailable = AppUtils.isNetworkAvailable(mContext);
if (netAvailable) {
request = request.newBuilder()
.cacheControl(CacheControl.FORCE_NETWORK)
.build();
} else {
request = request.newBuilder()
.cacheControl(CacheControl.FORCE_CACHE)
.build();
}
Response response = chain.proceed(request);
if (netAvailable) {
response = response.newBuilder()
.removeHeader("Pragma")
.header("Cache-Control", "public, max-age=" + 60 * 60)
.build();
} else {
response = response.newBuilder()
.removeHeader("Pragma")
.header("Cache-Control", "public, only-if-cached, max-stale=" + 7 * 24 * 60 * 60)
.build();
}
return response;
}
}
File cacheFile = new File(AppUtils.getDiskCacheDir(getContext()), "responses");
Cache cache = new Cache(cacheFile, App.DEFAULT_DIR_CACHE);
OkHttpClient client = new OkHttpClient().newBuilder()
.addInterceptor(new CacheInterceptor(getContext()))
.retryOnConnectionFailure(true)
.connectTimeout(15, TimeUnit.SECONDS)
.cache(cache)
.build();`
mRetrofit = new Retrofit.Builder()
.baseUrl(App.LOGINURL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
네트워크에 연결되면 서버에 액세스 할 수 있지만 네트워크가 연결되어 있지 않으면 내 게시물이 가로 채기됩니다. 나는 로컬 캐시 경로를 확인하신 후
HTTP 504 시켰음 요청 (전용 경우-캐시) 그리고 내가 내장 된 "응답"폴더가 않습니다 그리고 그것은 잘못된를 기록합니다
그리고 나는 그것을 해결하는 방법을 알고하지 않습니다 거기에 내가 텍스트 형식에서 엽니 다 안들어에서 "저널"라는 이름의 파일은이 비슷하다.
누구든지 나를 도울 수 있기를 바랍니다.
그런데 POST 요청을 GET으로 변경했습니다. 응답 본문의 NULL이며 응답 메시지의 "만족할 수없는 요청 (유일한 경우)"입니다. –