Java 使用POJO类关闭response.body()
当我将response.body()转换为POJO类时,如何关闭response.bodyJava 使用POJO类关闭response.body(),java,android,retrofit2,okhttp,Java,Android,Retrofit2,Okhttp,当我将response.body()转换为POJO类时,如何关闭response.body public class RetrofitClient { private static Retrofit retrofit = null; private final static OkHttpClient okHttpClient = new OkHttpClient.Builder() .readTimeout(10, TimeUnit.SECONDS)
public class RetrofitClient {
private static Retrofit retrofit = null;
private final static OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.connectTimeout(10, TimeUnit.SECONDS)
.build();
private final static Gson gson = new GsonBuilder().setLenient().create();
public static Retrofit getClient(String baseUrl) {
if (retrofit == null){
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
}
return retrofit;
}}
public static class GroupMembersCallback implements Callback<GroupAdminPreview>{
private List<String> usersUsername = new ArrayList<>();
private List<String> usersFullName = new ArrayList<>();
private List<String> usersIsAdmin = new ArrayList<>();
private GroupMembersAdapter membersAdapter;
private WeakReference<RecyclerView> mRecyclerView;
private WeakReference<Context> contextWeakReference;
public GroupMembersCallback(WeakReference<RecyclerView> mRecyclerView, WeakReference<Context> context){
this.mRecyclerView = mRecyclerView;
contextWeakReference = context;
}
@Override
public void onResponse(Call<GroupAdminPreview> call, Response<GroupAdminPreview> response) {
GroupAdminPreview groupAdminPreview = response.body();
for (GroupAdminPreview.GroupUser groupUser : groupAdminPreview.getGroupUsers()){
usersUsername.add(groupUser.getUserName());
usersFullName.add(groupUser.getFirstName() + " " + groupUser.getLastName());
usersIsAdmin.add(groupUser.getIsAdmin());
}
membersAdapter = new GroupMembersAdapter(usersUsername, usersFullName, usersIsAdmin, contextWeakReference, mRecyclerView);
mRecyclerView.get().setAdapter(membersAdapter);
}
@Override
public void onFailure(Call<GroupAdminPreview> call, Throwable t) {
System.out.println(t);
}
}
但是当我使用POJO类时,我不能做同样的事情。
对不起,我还是开发android应用程序的初学者
在我的应用程序运行一段时间后,我在Android Monitor中得到了以下信息:
A connection to ....... was leaked. Did you forget to close a response body?
事实上,如果使用改装,您不需要关闭ResponseBody。转换器为你做的 e、 g.如果您使用JacksonConverterFactory,则有一个名为JacksonResponseBodyConverter的类,请参见下面的代码:
@Override public T convert(ResponseBody value) throws IOException {
try {
return adapter.readValue(value.charStream());
} finally {
value.close();
}
}
编辑:
尝试在onResponse回调中检查响应是否成功,如果响应不成功,则调用response.errorBody.close()事实上,如果使用改型,则不需要关闭ResponseBody。转换器为你做的 e、 g.如果您使用JacksonConverterFactory,则有一个名为JacksonResponseBodyConverter的类,请参见下面的代码:
@Override public T convert(ResponseBody value) throws IOException {
try {
return adapter.readValue(value.charStream());
} finally {
value.close();
}
}
编辑:
请尝试在onResponse回调中检查响应是否成功,如果响应不成功,请调用response.errorBody.close()您正在冲突Okhttp和改型使用。或者看看那些库的旧版本
改装2为您关闭响应库您正在使用HTTP和改装冲突。或者看看那些库的旧版本
改装2为您关闭响应库为什么您认为需要关闭它?@cricket\u 007对不起,我编辑了我的帖子,以便更好地描述我的问题。如果你有时间,请看一看。Plz提供了创建改型和okhttp的代码,特别是自定义的
拦截器
@alxlx好的,我编辑了我的帖子。我没有在我的代码中使用自定义的拦截器。@WilzzNic,我已经更新了我的答案,检查它是否能解决你的问题……你为什么认为你需要关闭它?@cricket\u 007对不起,我编辑了我的帖子,以便更好地描述我的问题。如果你有时间,请看一看。Plz提供了创建改型和okhttp的代码,特别是自定义的拦截器
@alxlx好的,我编辑了我的帖子。我没有在我的代码中使用自定义的拦截器。@WilzzNic,我已经更新了我的答案,请检查它是否能解决您的问题……您好,alxlx,很抱歉给您带来不便。为了更好地描述我的问题,我编辑了我的帖子。如果有时间,请看一看。你好,alxlx,很抱歉给您带来不便。为了更好地描述我的问题,我编辑了我的帖子。如果你有时间,请看一看。