2013-03-31 2 views
4

Я хочу прочитать результат метода GET служб REST с использованием клиентского приложения, которое я создаю с использованием HttpUrlConnection. Этот метод возвращает информацию о пользователе. После прочтения я хочу создать объект Тип пользователя со всей информацией этого Пользователя. Я думаю, что мне нужно сначала преобразовать его в JSON, верно? Я использую GSON.Создайте объект из JSON (GSON: java.lang.IllegalStateException: ожидается BEGIN_OBJECT, но был STRING)

Что у меня есть:

if(urlConnection.getResponseCode()==200) 
{ 
    String response =""; 
    Scanner inStream = new Scanner(urlConnection.getInputStream()); 

    while(inStream.hasNextLine()) 
     response+=(inStream.nextLine()); 
    System.out.println(response); 

    //JSON 
    Gson gson = new Gson(); 
    String json = gson.toJson(response); 
    System.out.println(json); 

    // User Object 
    User object = new User(); 
    object = gson.fromJson(json, User.class); 
    System.out.println(object); 

}

Когда я первый отпечаток, я получаю:

{"userID":"user2","isMale":false,"isObject":false,"telephone":"+911111111","email":"[email protected]","birthdate":"2012-08-01","firstName":"Maria","lastName":"Silva","isocountrycode":"PT"} 

Когда я делаю вторую печать, я получаю:

"{\"userID\":\"user2\",\"isMale\":false,\"isObject\":false,\"telephone\":\"+911111111\",\"email\":\"[email protected]\",\"birthdate\":\"2012-08-01\",\"firstName\":\"Maria\",\"lastName\":\"Silva\",\"isocountrycode\":\"PT\"}" 

Но когда я пытаюсь int объект User Я получаю эту ошибку:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 226 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176) 
    at com.google.gson.Gson.fromJson(Gson.java:795) 
    at com.google.gson.Gson.fromJson(Gson.java:761) 
    at com.google.gson.Gson.fromJson(Gson.java:710) 
    at com.google.gson.Gson.fromJson(Gson.java:682) 
    at httpURLconnection.UserGetUserInfo.main(UserGetUserInfo.java:70) 
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 226 
    at com.google.gson.stream.JsonReader.expect(JsonReader.java:339) 
    at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:322) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:165) 
    ... 5 more 

Можете ли вы сказать мне, что я делаю неправильно? Все поля объектов пользователя были заполнены с использованием этого класса User.

Класс пользователя:

public class User { 
    String userID  = null; 
    boolean isMale  = false; 
    boolean isObject  = false; 
    String Telephone  = null; 
    String Email   = null; 
    Date Birthdate  = null; 
    String FirstName  = null; 
    String LastName  = null; 
    String ISOcountrycode = null; 

    (...) 
    } 
+1

Та же проблема, я получаю прямо сейчас? Как вы решили проблему? – nida

ответ

1

В классе USER вы должны объявить все типы данных, не более и не менее, который содержит JSONObject. F.e .: class User { String UserID = ""; Boolean isMale;}

и так далее.

В противном случае GSON.toJson(); не будет работать и выбрасывает исключение.

+0

Правильно .. У меня это в моем классе User: 'public class UserT { String userID = null; Строка FirstName = null; String LastName = null; Строка ISOcountrycode = null; String Telephone = null; boolean isMale = false; Строка Email = null; Дата Дата рождения = null; boolean isObject = false; ' – user2144555

+0

Это потому, что заказ не является тем же самым? Но теперь я попытался с тем же порядком, и ошибка такая же. – user2144555

+0

Возможно, это название класса. UserT - ваш класс в комментариях, но вы используете User.class в своем вопросе. Может быть, это и проблема порядка, но я никогда не узнавал об этом. –

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