Ошибка переполнения стека GSON.fromJson

Я получаю исключение ошибка переполнения стека при попытке загрузить свой Json в свой класс на устройствах JellyBean, НО на ICS это работает совершенно нормально, это ошибка?

JSON

{
  "user": {

     "id": 216,
     "city_id": 30910,
     "city_name": "Edinburgh",
     "country_id": 482,
     "country_name": "United Kingdom",
     "email": "[email protected]",
     "username": "[email protected]",
     "name": "Alex",
     "surname": "Qwerty",
     "gender": "male",
     "send_emails": 1,
     "birthday": 969483600,
     "interests": "burns, wiskey, beer",
     "categories": [
         {
            "id": 11,
            "name": "Art",
            "icon": "http://my_icon.png",
            "subcategories": [
                {
                    "id": 39,
                    "name": "Graphic"
                }
            ]
        }
    ]
}

}

Мой класс

public class User implements Serializable, Cloneable{
public final static String MALE = "male";
public final static String FEMALE = "female";
public int id;
public int city_id;
public String city_name="";
public int country_id;
public String country_name="";
public String email="";
public String username="";
public String name="";
public String surname="";
public String gender="";
public int send_emails;
public Long birthday;
public String interests="";
public int fb_id;
public int vk_id;
public String plain_password="";

public ArrayList<Category> categories;

@Override
public User clone() throws CloneNotSupportedException {
    return (User)super.clone();
  }
}

public class Category {
public int id;
public String name;
public String icon;
public BitmapDrawable iconBitmap;
public ArrayList<SubCategory> subcategories;
public int checkedSubCategoriesCount;
public int changedSubCategoriesCount;

public boolean equalCategory(Category mCategory) {
    return id == mCategory.id;
}
}

public class SubCategory {
public int id;
public String name;
public boolean isChecked;
public boolean isChanged;

public boolean equalCategory(SubCategory mCategory) {
    return id == mCategory.id;
}
 }

Метод

public void getCurrentUser(final AuthToken token, final LoadCompleteListener listener) {
    if (listener != null) {
        new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    URL url = new  URL(mURL_API.concat(SysUtilHelper.getDeviceLanguage() + "/user?token=" + token.token));
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setRequestProperty("Connection", "close");
                    conn.connect();
                    if (getResponseCode(conn) == HttpURLConnection.HTTP_OK) {
                        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                        JsonObject request = (JsonObject) mJparser.parse(in.readLine());
                        in.close();
                        if (!request.has("error")) {

                            User user = mGson.fromJson(request.getAsJsonObject("user"), new TypeToken<User>() {
                            }.getType());
                            listener.onLoadSucces(user);
                        } else {
                            listener.onLoadError(request.get("message").toString());
                        }
                        conn.disconnect();
                    } else {
                        int responseCode = conn.getResponseCode();
                        conn.disconnect();
                        throw new NetworkException(ERROR_BAD_REQUEST + responseCode);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    listener.onLoadError(e.toString());
                }

            }
        }).start();

    }
}

P.S. Я использую gson 2.2.4

ОБНОВЛЕНИЕ

вот мой логкэт

04-22 01:37:12.415: E/AndroidRuntime(807): FATAL EXCEPTION: Thread-79
04-22 01:37:12.415: E/AndroidRuntime(807): java.lang.StackOverflowError
04-22 01:37:12.415: E/AndroidRuntime(807):  at    com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:371)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:380)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:375)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:380)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:375)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:380)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:375)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:380)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:375)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:380)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:375)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:380)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:375)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:380)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:375)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:380)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:375)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:380)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:375)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:380)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:375)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:380)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:375)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:380)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:375)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:380)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:375)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:380)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.$Gson$Types.resolve($Gson$Types.java:355)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTyp eAdapterFactory.java:117)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.Gson.getAdapter(Gson.java:356)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:82)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.Gson.getAdapter(Gson.java:356)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:82)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.Gson.getAdapter(Gson.java:356)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:82)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
04-22 01:37:12.415: E/AndroidRuntime(807):  at com.google.gsonfixed.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeA

person whizzzkey    schedule 22.04.2014    source источник
comment
Ваш метод getCurrentUser() находится в AsyncTask?   -  person Rethinavel    schedule 22.04.2014
comment
@RethinavelPillai, конечно, нет, getCurrentUser() — это статический метод в моем классе NetworkHelper.class, и, как вы можете видеть, у него есть собственный поток.   -  person whizzzkey    schedule 22.04.2014
comment
Можете ли вы опубликовать журнал кота?   -  person Kolchuga    schedule 22.04.2014
comment
@RethinavelPillai Я не вижу никакой связи между AsyncTask и gson.fromJson(), можете ли вы объяснить, по какой причине я должен это сделать?   -  person whizzzkey    schedule 22.04.2014
comment
@Kolchuga смотри мое обновление   -  person whizzzkey    schedule 22.04.2014
comment
@RethinavelPillai, чувак, ты ПОНИМАЕШЬ, что я имею в виду в своем сообщении?   -  person whizzzkey    schedule 22.04.2014
comment
@whizzzkey Попробуйте извлечь строку из BufferedReader и использовать другую функцию fromJson fromJson(String, User.class). TypeToken обычно используется для десериализации коллекций из json.   -  person Kolchuga    schedule 22.04.2014
comment
см. этот code.google.com/p/google-gson/ проблемы/подробности?id=440   -  person Asif Bhutto    schedule 22.04.2014
comment
@bhutto, пожалуйста, напишите свой комментарий в качестве ответа, который я могу принять   -  person whizzzkey    schedule 24.04.2014
comment
@whizzzkey ты решил это ответом Кольчуги   -  person Asif Bhutto    schedule 24.04.2014
comment
@bhutto Я решил это с помощью вашего ответа, поэтому, пожалуйста, сформулируйте его как ответ   -  person whizzzkey    schedule 24.04.2014


Ответы (1)


Думаю проблема в BufferedReader

 {
        InputStream is = conn.getInputStream();
        InputStreamReader isr = new InputStreamReader(is,"UTF8");
        BufferedReader br=new BufferedReader(isr);
        String read;
        StringBuffer sb = new StringBuffer();
        while((read = br.readLine()) != null) {
            sb.append(read);
        }
        br.close();
        sb.toString();

}

Также попробуйте использовать функцию fromJson(JsonObject, User.class)

person Kolchuga    schedule 22.04.2014
comment
Я пытался использовать String вместо JsonObject, а также использовал ваш код, но ничего не помогает. - person whizzzkey; 24.04.2014
comment
code.google.com/p/google-gson/issues/ detail?id=440 Как говорится, попробуйте использовать более старую версию Gson. Если это не поможет, попробуйте библиотеку Джексона jackson.codehaus.org - person Kolchuga; 24.04.2014