GSON.fromJson грешка в stackoverflow

Получавам изключение stackoverflow грешка, докато се опитвам да заредя моя 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

АКТУАЛИЗАЦИЯ

ето го моя logcat

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
Можете ли да публикувате log cat?   -  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 Опитайте се да извлечете String от BufferedReader и използвайте друга функция fromJson fromJson(String, User.class). TypeToken обикновено се използва за десериализация на колекции от json.   -  person Kolchuga    schedule 22.04.2014
comment
вижте този code.google.com/p/google-gson/ issues/detail?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 jackson.codehaus.org - person Kolchuga; 24.04.2014