2015-12-13 2 views
0

Я использую переоснащения 1.9.0, и я попытался следующий код, чтобы получить ответ в формате JSON:Не удается получить JSON ответ с Модернизированный

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); 
       } 
      }); 
} 

Так эта строка кода:

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

должен дать мне ответ в формате JSON, однако это не сработало, потому что я получаю следующий результат:

Ссылка: http://i.imgur.com/mBQs1LL.png

Так вот как мой ответ в формате JSON должен выглядеть следующим образом:

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

Я уже испытал это на моем сервере, где я делал пост запрос. Ниже вы можете увидеть скриншот этого:

Ссылка: http://i.imgur.com/PtEMR12.png

ответ

2

Проблема здесь в том, что response.getBody() возвращает TypedInputStream объект, который вы можете непосредственно не выход, потому что это не является String.

Чтобы прочитать TypedInputStream есть несколько вариантов, как размещены в: Retrofit callback get response body, самое простое существо:

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

Если брошена следующее сообщение об ошибке:

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

Затем убедитесь, что вы установили .setLogLevel(RestAdapter.LogLevel.FULL) на странице RestAdapter, которую вы используете для создания сервиса.

Смежные вопросы