改造响应机构关闭

时间:2017-05-26 11:52:44

标签: android retrofit retrofit2

我在下面的代码中使用了改造。但是,我无法找到任何解决方案和官方文档来帮助我阻止泄漏和关闭响应机构。也许有人知道它应该是什么样的? 我的改造电话:

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

                }
            });

3 个答案:

答案 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)

这可能会有所帮助;

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

据此,改造2为您关闭了身体

Retrofit Closing Response Body

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

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