2016-09-23 5 views
1

私はSerializeに私がしようStackOverflowエラーいつでも私はGson StackOverflowのエラーアンドロイド

public ObjectClass(Context context) { 
    ((MainApplication) context.getApplicationContext()).getMainAppComponent().inject(this); 
} 

すべてが正常に動作します。このコンストラクタを削除する必要があります2 Constructors

public class ObjectClass extends BaseObservable implements Serializable { 

    @Inject Realm realm; 
    private String TAG = "ObjectClass"; 

    private String name; 
    private String address; 

    public ObjectClass() { 
    } 

    public ObjectClass(Context context) { 
     ((MainApplication) context.getApplicationContext()).getMainAppComponent().inject(this); 
    } 

    public String getName() { 
     return name; 
    } 

    public void setname(String name) { 
     this.name = name; 
    } 

    @Bindable 
    public String getAddress() { 
     return address; 
    } 

    public void setaddress(String address) { 
     this.address = address; 
     Realmaddress result = realm.where(Realmaddress.class).equalTo("id", address).findFirst(); 
     if (result != null) 
      Log.e(TAG, result.toString()); 
    } 
} 

を持っている私のPOJO ObjectJSON Stringを取得します。しかし、私はそれを残して、私はStackOverFlowエラーが発生します。

String testJson = "{\n" + 
       "\t\"name\" : \"Test Name\",\n" + 
       "\t\"address\" : \"Test Address\"\n" + 
       "}" 

Gson gson = new GsonBuilder().setDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS'Z'").setPrettyPrinting().create(); 
    ObjectClass objectClass = gson.fromJson(testJson, ObjectClass.class); 

すべてがちょうどハングしてしばらくした後、私は深いデバッグの後、1

のでStackOverflowエラー

EDITを取得します。私はコンストラクタが問題ではないことに気づいた。これは@Inject Realm realm;だったので、私はこれをやろうとしました@Expose(deserialize = false, serialize = false) @Inject Realm realm;これも修正されていません。

EDIT 2

私はこのように私のGSON Exclusion Strategyを編集しました。しかし、それはそれはそれは

public class CustomGsonParser { 

    public static Gson returnCustomParser(){ 
     return new GsonBuilder() 
       .setExclusionStrategies(new ExclusionStrategy() { 
        @Override 
        public boolean shouldSkipField(FieldAttributes f) { 
         if (f.getAnnotation(Inject.class) != null || 
           f.getDeclaringClass().equals(RealmObject.class) || 
           f.getDeclaringClass().equals(Realm.class)) { 
          Log.e("GSONBuild", "Exists Inject"); 
          return true; 
         } 
         return false; 
        } 

        @Override 
        public boolean shouldSkipClass(Class<?> clazz) { 
         if (clazz.equals(Inject.class)) 
          return true; 
         return false; 
        } 
       }) 
       .create(); 
    } 
} 

答えて

0

だから、私は実際には主原因だったRealmに気づいた。私はまだなぜか分からない。だから、私がやったことは文脈を通り過ぎて、dependency injectModelはもうなくなった。コンテキストを使用してRealmインスタンスを作成します。だから、私のObject Classはこのようになります

public class ObjectClass extends BaseObservable implements Serializable { 

    private String TAG = "ObjectClass"; 

    private String name; 
    private String address; 
    @Expose(deserialize = false, serialize = false) 
    private Context context; 

    public ObjectClass() { 
    } 

    public ObjectClass(Context context) { 
     this.context = context; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setname(String name) { 
     this.name = name; 
    } 

    @Bindable 
    public String getAddress() { 
     return address; 
    } 

    public void setaddress(String address) { 
     this.address = address; 
     Realmaddress result = RealmUtils.getInstance(context).where(Realmaddress.class).equalTo("id", address).findFirst(); 
     if (result != null) 
      Log.e(TAG, result.toString()); 
    } 
} 
0

あなたがdependency injectionを使用していると、正しくserialisedを取得していないと、それは無限serialisationになってきた行は次のものがあるが存在する場合はブロックし、ログに入った後も、それを修正しません時間のある程度の間隔であなたの記憶が消耗するにつれて、stackoverflowエラーが発生しています。

((MainApplication) context.getApplicationContext()).getMainAppComponent().inject(this); 

あなたのコードでは使用できない場合は上記の文章を削除するか、他の方法で削除してください。

+0

さて、それは使用されています。それ以外の意味は?オブジェクトが 'databinder'によって使用されているので、' realm'が必要です。 'Gson'はそれを省略し、それ自体には関係しないようにすることはできますか? –

+0

@ItuokeAjanlekoko他の意味では、あなたはこのケースであなたのデータを渡したり送るためにインターフェイスを使うことができます – Nikhil