2017-05-26 53 views
0

我使用改装就像在下面的代码。但我找不到任何解决办法和官方文件,这些文件帮助我阻止泄密并关闭响应机构。也许有人知道它应该是什么样子? 我的电话改造:Retrofit Response body close

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

你不能调用'response.body()'不止一次 –

+0

添加地图上的所有标记我尝试清除响应之后。我在官方文档中看到,总是关闭()应该完成。此外android工作室扔logbu我有泄漏信息,并没有使用close()它可以使用。之后,我通过Eclipse Mat检查堆,并且看到很多响应对象。 –

+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

+0

ooow看起来好主意 –

+0

以及如何在您的解决方案中使用密切的声明? –

+0

也许它不是在对这个活动的清理一切由GC任何泄漏和的onDestroy? –

0

这可能帮助;

response.raw().body().close(); 

据此,改造2阻塞体为你

Retrofit Closing Response Body

+0

它不工作 –

+0

是的,我读同一文档,但生掷我expception ... –

-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); 

请尝试让我们所有人发表评论:)。

+0

如果我用你的解决方案,我不应该关闭效应初探? –

+0

对不起,我的坏。试试这个。 https://github.com/square/okhttp/issues/2311 –

+0

成员变量与匿名类有什么不同? –

相关问题