Retrofit callback get response body

android, retrofit

Solution

Inside callback's angle brackets write "Response" and then extract the stream from this response.

service.getToto("toto", new Callback<Response>() {
    @Override
    public void success(Response result, Response response) {

        //Try to get response body
        BufferedReader reader = null;
        StringBuilder sb = new StringBuilder();
        try {

            reader = new BufferedReader(new InputStreamReader(result.getBody().in()));

            String line;

            try {
                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }


        String result = sb.toString();
    }

    @Override
    public void failure(RetrofitError error) {

    }
});

Problem

I am testing Retrofit to compare it with Volley and I am struggling to get the response from my requests. For example, I do something like this: ``` RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint("http://localhost:8080") .build(); MyService service = restAdapter.create(MyService.class); service.getToto("toto", new Callback<Toto>() { @Override public void success(Toto toto, Response response) { // Try to get response body BufferedReader reader = null; StringBuilder sb = new StringBuilder(); try { reader = new BufferedReader( new InputStreamReader(response.getBody().in())); String line; try { while ((line = reader.readLine()) != null) { sb.append(line); } } catch (IOException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } String result = sb.toString(); } @Override public void failure(RetrofitError error) {} }); ``` It works, the object `toto` is set, but for testing purposes, I also want to display the JSON response returned by the server. So I am trying to read the `InputStream` from `response.getBody()` which is a `TypedInputStream`. Unfortunately, I always get an `IOException : Stream is closed`. I tried to use the Utils class from Retrofit but I get the same `IOException` error.

Original source

Related problems