2016-08-25 23 views
0

我有一個簡單的用戶類。用戶有一個追隨者的arrayList,其中每個追隨者是一個用戶對象。現在,我使用戶對象1和用戶對象2.我將用戶對象1添加到用戶對象2的follwers數組,反之亦然。因此,現在用戶對象2有一個跟隨者是用戶對象2,其中有一個跟隨者用戶對象1.對於firebase,你如何獲得@exclude工作?

我不能爲我的生活弄清楚爲什麼當我發送用戶對象1時,firebase會一直崩潰發送到我的Firebase數據庫。我把@Exclude放在getters和arrayList上,似乎沒有任何工作。我的Firebase安全性必須更改嗎?因爲如果我將用戶對象1與用戶對象2一起作爲跟隨者並確保用戶對象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」。我猜我使用的firebase已經過時了。那麼,有什麼方法可以將dummyUser1添加到dummyUser2的追隨者,然後將其添加回dummyUser1的follwer而不會導致程序崩潰並將其添加到我的Firebase數據庫中? –