简体   繁体   中英

Can't get json response with Retrofit

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: http://i.imgur.com/mBQs1LL.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: http://i.imgur.com/PtEMR12.png

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM