所以我有一個用戶類。而用戶類有一個叫做追隨者的用戶列表列表。當我嘗試上傳一個用戶對象(在這個用戶對象的追隨者arraylist中的一些用戶)Firebase無法做到這一點,我的程序崩潰...我無法計算如何存儲和檢索我自己的對象其中有其他自定義對象。如何在Android的Firebase中存儲和檢索對象?
所以主要錯誤我得到的是:
無法啓動活動ComponentInfo {com.daprlabs.swipedeck/com.daprlabs.swipedeck.ActivityCenter}:com.firebase.client.FirebaseException:解析失敗到快照
這是我的java代碼。
編輯:添加@exclude,但仍然無法正常工作......
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRef = new Firebase("Fire base reference...");
dummyUser();
}
private void dummyUser()
{
//Andie <- Chris <- Qamar
mainDummyUser = new User();
mainDummyUser.setName("Chris");
mainDummyUser.setLocation("Deutchland");
mainDummyUser.setDummyImage(R.drawable.chris);
//Second Dummy
User secondDummy = new User();
secondDummy.setName("Andie");
secondDummy.setLocation("Germany");
secondDummy.setDummyImage(R.drawable.andie);
secondDummy.addtoFollowers(mainDummyUser);
mainDummyUser.addtoFollowers(secondDummy);
//Add users to Firebase
mRef.child("users").child("Dummy User 1").setValue(mainDummyUser);
}
這裏是我的用戶類,非常簡單。
public class User
{
private String userName;
private int userID;
private String userEmail;
private String userProfilePicture;
private ArrayList<CityFolders> userFolders = new ArrayList<>();
//Constructor
public User()
{
setDummyUserID();
}
public void addtoFollowers(User user)
{
userFollowers.add(user);
}
public void setLocation(String location)
{
this.location = location;
}
public void setDummyImage(int image)
{
this.dummyImage = image;
}
public void setDummyUserID()
{
Random randomNumberGenerator = new Random();
userID = randomNumberGenerator.nextInt(1000000);
}
//Getter
public String getUserName()
{
return userName;
}
public String getLocation()
{
return location;
}
public int getUserID()
{
return userID;
}
@Exclude
public ArrayList<UserFinal> getUserFollowers()
{
return userFollowers;
}
//Goes on...
}
這裏是我的堆棧跟蹤:
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
你需要從追隨者返回鏈接給跟隨的用戶?由於錯誤信息表明這會創建無限的對象鏈...... – marsbear
不,因爲每個用戶也有一個名爲userFollowing的數組列表。因此,追隨者將各自擁有自己的arrayList,稱爲「userFollowing」,在這種情況下,對於每個追隨者,他們的下一個用戶數組將具有mainDummyUser –
然後只需刪除後鏈接:)或者排除像我在回答。 – marsbear