response.body()をPOJOクラスに変換したときに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)
.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);
}
}
私はこのコードを使用した後response.bodyを閉じる読ん:
ResponseBody body = response.body();
body.close();
しかし、私はPOJOクラスを使用していたとき、私は同じことを行うことはできません。 申し訳ありませんが、私はまだAndroidアプリケーションの開発の初心者です。
いくつかの時間のために自分のアプリケーションの実行の後、私はAndroidのモニタでこれを得た:実際には
A connection to ....... was leaked. Did you forget to close a response body?
なぜあなたはそれを閉じなければならないと思いますか? –
@ cricket_007申し訳ありません、自分の問題をよりよく説明するために投稿を編集しました。時間があれば見てください。 –
Plzプロバイダは、retrofitとokhttpを生成するコード、特にカスタムのInterceptorを生成します。 – aLeX