我有一個簡單的用戶類。用戶有一個追隨者的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
這是否意味着我應該更新我的firebase或我應該使用@JsonIgnore? –
所以它結束了工作,當我把「@JsonIgnore」。我猜我使用的firebase已經過時了。那麼,有什麼方法可以將dummyUser1添加到dummyUser2的追隨者,然後將其添加回dummyUser1的follwer而不會導致程序崩潰並將其添加到我的Firebase數據庫中? –