2014-04-22 2 views
0

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

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

UPDATE

вот мой 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 
+0

Является ли ваш метод getCurrentUser() od находится в 'AsyncTask'? –

+0

@ RethinavelPillai, конечно, нет, getCurrentUser() - это статический метод в моем NetworkHelper.class, и, как вы можете видеть, у него есть собственный поток – whizzzkey

+0

Можете ли вы отправить журнал cat? – Kolchuga

ответ

0

Я думаю, что проблема в 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)

+0

Я попытался использовать String вместо JsonObject, а также использовал ваш код, но ничего не помогает. – whizzzkey

+0

https://code.google.com/p/google-gson/issues/detail?id=440 Как говорится, попробуйте использовать более старую версию Gson. Если это не поможет попробовать библиотеку Джексона http://jackson.codehaus.org/ – Kolchuga

+0

спасибо. уже сделали это – whizzzkey

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