2016-08-25 6 views
0

私は単純なUserクラスを持っています。ユーザーは、フォロワーのarrayListを持ちます。各フォロワーはユーザーオブジェクトです。今、私はユーザーオブジェクト1とユーザーオブジェクト2を作成します。ユーザーオブジェクト1のユーザーオブジェクト2のフォルダー配列にユーザーオブジェクト1を追加します。したがって、ユーザオブジェクト2には、フォロワユーザオブジェクト1を持つユーザオブジェクト2であるフォロワがあります。firebaseについては、どうすれば@excludeを動作させることができますか?

ユーザオブジェクト1を送信すると、firebaseがクラッシュする理由がわかりません私のfirebaseデータベースに送られました。 gettersとarrayListに@Excludeを置くと何も動かないようです。私のfirebaseのセキュリティを変更する必要がありますか?なぜなら、ユーザーオブジェクト1をフォロワーとして入れ、ユーザーオブジェクト2がフォロワーとしてユーザーオブジェクト1を持っていないことを確認すると、それが働いているからです。しかし、私はユーザー1にユーザー2を従わせたいと思います。ここで

は私の主な活動コードです:ここで

@Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mRef = new Firebase("Fire base reference..."); 
     dummyUser(); 
    } 

private void dummyUser() 
{ 
    UserFinal finalDummyUser = new UserFinal(); 
    finalDummyUser.setUserName("chris"); 
    finalDummyUser.setLocation("Netherlands"); 

    UserFinal finalDummyUser2 = new UserFinal(); 
    finalDummyUser2.setUserName("Andie"); 
    finalDummyUser2.setLocation("Germany"); 
    finalDummyUser2.addFollower(finalDummyUser); 
    finalDummyUser.addFollower(finalDummyUser2); 
    mRef.child("users").child("user3").setValue(finalDummyUser); 
} 

は私UserFinalクラスである:ここでは

public class UserFinal 
{ 
    private String userName; 
    private String location; 
    private int userID; 
    //Arrays 
    private ArrayList<UserFinal> userFollowers = new ArrayList<>(); 

    //Empty Constructor 
    public UserFinal() 
    { 

    } 
    //adders 
    public void addFollower(UserFinal follower) 
    { 
     userFollowers.add(follower); 
    } 

    //setters 
    public void setUserName(String userName) 
    { 
     this.userName = userName; 
    } 
    public void setLocation(String location) 
    { 
     this.location = location; 
    } 
    public void setUserID(int id) 
    { 
     this.userID = id; 
    } 
    public void setUserFollowers(ArrayList<UserFinal> followers) 
    { 
     this.userFollowers = followers; 
    } 

    //getters 
    public String getUserName() 
    { 
     return userName; 
    } 
    public String getLocation() 
    { 
     return location; 
    } 
    public int getUserID() 
    { 
     return userID; 
    } 
    @Exclude 
    public ArrayList<UserFinal> getUserFollowers() 
    { 
     return userFollowers; 
    } 
} 

は私のスタックトレースです:

08-24 19:07:26.549 23384-23384/com.daprlabs.swipedeck E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.daprlabs.swipedeck, PID: 23384 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.daprlabs.swipedeck/com.daprlabs.swipedeck.ActivityCenter}: com.firebase.client.FirebaseException: Failed to parse to snapshot 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2434) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) 
at android.app.ActivityThread.access$900(ActivityThread.java:157) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5525) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
Caused by: com.firebase.client.FirebaseException: Failed to parse to snapshot 
at com.firebase.client.Firebase.setValueInternal(Firebase.java:357) 
at com.firebase.client.Firebase.setValue(Firebase.java:248) 
at com.daprlabs.swipedeck.ActivityCenter.dummyUser(ActivityCenter.java:165) 
at com.daprlabs.swipedeck.ActivityCenter.onCreate(ActivityCenter.java:122) 
at android.app.Activity.performCreate(Activity.java:6272) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)  
at android.app.ActivityThread.access$900(ActivityThread.java:157)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)  
at android.os.Handler.dispatchMessage(Handler.java:102)  
at android.os.Looper.loop(Looper.java:148)  
at android.app.ActivityThread.main(ActivityThread.java:5525)  
at java.lang.reflect.Method.invoke(Native Method)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)  
Caused by: java.lang.IllegalArgumentException: Infinite recursion (StackOverflowError) (through reference chain: java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowers"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowing"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowers"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowing"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowers"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowing"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowers"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowing"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowers"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowing"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowers"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowing"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowers"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowing"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowers"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowing"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowers"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowing"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowers"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowing"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowers"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowing"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowers"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowing"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowers"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowing"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowers"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowing"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowers"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowing"]->java.util.ArrayList[0]->com.daprlabs.swipedeck.Globals.User["userFollowers"]->java.util.Arra 

08-24 19:07:26.577 23384-23394/com.daprlabs.swipedeck W/art: Suspending all threads took: 32.173ms 

答えて

1

com.firebase.clientの存在stacktraceは、レガシーFirebase SDK、2.Xでビルドしていることを示します。従来のSDKでは、使用するアノテーションは@JsonIgnoreです。これは、新しい9.X SDKの@Excludeに置き換えられました。

変更はUpgrade Guideにも記載されています。

+0

私はfirebaseを更新する必要がありますか、@JsonIgnoreを使用する必要がありますか? –

+0

それは私が "@JsonIgnore"を置くとき働いた。私が使用していた火災基地は時代遅れだったと思う。ですから、dummyUser2のフォロワーにdummyUser1を追加し、プログラムをクラッシュせずにそれを私のfirebaseデータベースに追加しなくても、それをdummyUser1のフォールバックに追加する方法はありますか? –

関連する問題