我在下面的代码中使用了改造。但是,我无法找到任何解决方案和官方文档来帮助我阻止泄漏和关闭响应机构。也许有人知道它应该是什么样的? 我的改造电话:
PlacesAPI.Factory.getInstance().getPlaces().enqueue(new Callback<Places>() {
@Override
public void onResponse(Call<Places> call, Response<Places> response) {
for (int i = 0; i < response.body().getPosts().size(); i++) {
if (response.body().getPosts().get(i).getNazwa().equals(shopName)) {
addMarker(Double.parseDouble(response.body().getPosts().get(i).getDlug()),
Double.parseDouble(response.body().getPosts().get(i).getSzer()));
}
}
}
@Override
public void onFailure(Call<Places> call, Throwable t) {
}
});
答案 0 :(得分:1)
重构您的代码。
反复抓住反应机构效率不高
顺序说明,请参阅下面的链接
响应正文只能被消费一次
final List<Post> posts = response.body().getPosts();
for (Post p : posts) {
if (p.getNazwa().equals(shopName)) {
addMarker(Double.parseDouble(p.getDlug()), Double.parseDouble(p.getSzer()));
}
并且,根据文档,是的,必须关闭响应,因此使用try
块来完成
https://square.github.io/okhttp/3.x/okhttp/okhttp3/ResponseBody.html
答案 1 :(得分:0)
答案 2 :(得分:-2)
您是否尝试过不使用匿名类作为回调? 尝试改为创建一个类成员。
private Callback<Places> mCallback = new Callback<Places>() {
@Override
public void onResponse(Call<Places> call, Response<Places> response) {
for (int i = 0; i < response.body().getPosts().size(); i++) {
if (response.body().getPosts().get(i).getNazwa().equals(shopName)) {
addMarker(Double.parseDouble(response.body().getPosts().get(i).getDlug()),
Double.parseDouble(response.body().getPosts().get(i).getSzer()));
}
}
}
@Override
public void onFailure(Call<Places> call, Throwable t) {
}
});
PlacesAPI.Factory.getInstance().getPlaces().enqueue(mCallback);
请尝试发表评论通知我们所有人:)。