2017-05-26 85 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

成員變量與匿名類有什麼不同? –

相關問題