0

I'm using retrofit 1.9.0 and I had tried the following code to get a response in json format:

public void Execute(String email, String password, Callback<User> callback) {
    final Callback<User> cb = callback;
    RestAdapter restAdapter = buildRestAdapter();
    System.out.println("Email " + email + " passowrd " + password);
    User user = new User();
    user.setEmail(email);
    user.setPassword(password);
    restAdapter.create(YutonAPI.class).postLogin(
            user,
            new Callback<User>() {
                @Override
                public void success(User user, Response response) {
                    System.out.println("succes");
                    System.out.println(response.getBody());
                }

                @Override
                public void failure(RetrofitError error) {
                    System.out.println("error "+ error);
                }
            });
}

So this line of code:

System.out.println(response.getBody());

Should give me a response in json format however it didn't work because I'm getting the following output:

Link: https://i.stack.imgur.com/pA642.png

So this is how my response in json format should look like:

{
    "user": {
        "image": "https://www.gravatar.com/avatar/e0a190604dc3dd2ee7b66bb95c20ef7f?d=identicon&s=512"
        "email": "a@hotmail.com"
        "name": "a"
        "id": "566dfac21043a31820bf1ae6"
    } -
}

I had already tested it on my server where I was making a post request. Below you can see a screenshot of it:

Link: https://i.stack.imgur.com/XJPbA.png

superkytoz
  • 1,267
  • 4
  • 23
  • 43

1 Answers1

3

The issue here is that response.getBody() returns a TypedInputStream object, which you can't directly output because it isn't a String.

To read a TypedInputStream there are several options, as posted in: Retrofit callback get response body, the easiest being:

String body = new String(((TypedByteArray) response.getBody()).getBytes());

If the following error is thrown:

java.lang.ClassCastException: retrofit.client.UrlConnectionClient$TypedInputStream cannot be cast to retrofit.mime.TypedByteArray

Then make sure that you set .setLogLevel(RestAdapter.LogLevel.FULL) on the RestAdapter that you use to create the service.

Community
  • 1
  • 1
AtraCaelus
  • 196
  • 1
  • 4