【发布时间】:2021-10-19 22:54:11
【问题描述】:
我使用 Retrofit 进行 API 调用。除了返回大约 15k 条记录的巨大响应之外,所有 API 调用都运行良好。
问题是通话进度条无限显示,直到我得到响应。并且响应太大而导致 OOM 异常。
作为一个解决方案,我发现需要使用@Streaming 注解。我使用了它,但没有得到中间回调。我希望 API 应该一一返回响应块。
请帮帮我。
public static ServiceInterface getServiceAPIClient() {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
Gson gson = new GsonBuilder()
.setLenient()
.create();
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(
new Interceptor() {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request request = chain.request();
Request.Builder builder = request.newBuilder();
builder = request.newBuilder();
if (!TextUtils.isEmpty(PrefsHelper.getAccessTokenEdrm())) {
builder.addHeader(AUTHORIZATION, PrefsHelper.getAccessTokenEdrm());
}
builder.addHeader(API_VERSION, "1.0")
.addHeader("Accept", "application/json");
request = builder.build();
return chain.proceed(request);
}
}).connectTimeout(5, TimeUnit.MINUTES) .readTimeout(5, TimeUnit.MINUTES).addInterceptor(interceptor)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.client(client)
.build();
return retrofit.create(ServiceInterface.class);
}
API方法
@POST(EdrmConstants.SEARCH_DOCUMENTS)
@Streaming
Observable<ResponseBody> searchDocuments(@Body DocumentRequest documentRequest);
【问题讨论】:
-
我认为你应该添加分页以获得良好的性能。
-
使用带有分页的 MVVM 架构,可以有效地加载您的数据。检查this
标签: android retrofit retrofit2