簡體   English   中英

將對象列表添加到Firebase

[英]Adding lists of objects to Firebase

我正在研究一些將“游戲”對象放入Firebase數據庫中的代碼。 每個游戲都有一個名稱和“玩家”的數組列表,每個玩家都有一個名稱和一個“目標”。 但是,當我運行代碼時,應用程序只是崩潰而沒有明確的錯誤,只是表明它無法執行該方法。 我敢肯定,這與玩家名單有關,因為我早就可以讓它僅與游戲名稱一起使用。

public void beginGame(View view) {
    mDatabase = FirebaseDatabase.getInstance().getReference();


    EditText gameNameField = (EditText) findViewById(R.id.gameName);
    String gameName = gameNameField.getText().toString().trim();
    Collections.shuffle(players);
    if (gameName.isEmpty()) {
        int duration = Toast.LENGTH_LONG;

        Toast toast = Toast.makeText(getApplicationContext(),
                R.string.toast_no_game_name, duration);
        toast.show();

    } else if (playerNames.size() < 2) {
        int duration = Toast.LENGTH_LONG;

        Toast toast = Toast.makeText(getApplicationContext(),
                R.string.toast_not_enough_players, duration);
        toast.show();

    } else {
        for (int i = 0; i < players.size(); i++) {
            if (i != (players.size() - 1)) {
                players.get(i).target = players.get(i + 1);
            } else {
                players.get(i).target = players.get(0);
            }
        }
        Game game = new Game(gameName, players);
        mDatabase.child("Games").child(gameName).setValue(game);

        Intent intent = new Intent(StartNewGameActivity.this, SessionsActivity.class);
        startActivity(intent);
    }
}

明確地說,我希望數據庫這樣組織:

Games:
    Game1:
        name: Johns Game
        Players: 
             John
             Mike

    Game2:......

編輯1在對話框中初始化播放器,要求輸入播放器名稱,然后將播放器傳遞到陣列列表。

public void addNewPlayer(View view) {
    DialogFragment newFragment = new CreatePlayerDialogFragment();
    newFragment.show(getSupportFragmentManager(), "Player");
}

@Override
public void onDialogPositiveClick(String name) {
    playerNames.add(name);
    players.add(new Player(name));
}

這是我的Logcat中的錯誤

11-26 12:15:29.780 10730-10730/com.example.hunte.assassin E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.hunte.assassin, PID: 10730
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
        at android.view.View.performClick(View.java:5217)
        at android.view.View$PerformClick.run(View.java:21342)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5551)
        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.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
        at android.view.View.performClick(View.java:5217) 
        at android.view.View$PerformClick.run(View.java:21342) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5551) 
        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.StackOverflowError: stack size 8MB
        at java.lang.reflect.Method.invoke(Native Method)
        at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
        at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
        at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
        at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
        at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
        at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
        at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
        at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
        at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
        at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
        at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
        at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
        at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
        at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
        at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
        at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
        at com.google.android.gms.internal.zzbq
11-26 12:15:29.780 10730-10740/com.example.hunte.assassin I/art: Background sticky concurrent mark sweep GC freed 6950(796KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 136MB/136MB, paused 42.643ms total 65.881ms
11-26 12:15:30.129 1761-1821/? V/WindowOrientationListener: Proposed rotation changed! : currentRotation=0, proposedRotation=0, oldProposedRotation=-1, predictedRotation=0, timeDeltaMS=66.65039, isAccelerating=false, isFlat=false, isSwinging=false, isOverhead=false, isTouched=false, timeUntilSettledMS=0.0, timeUntilAccelerationDelayExpiredMS=0.0, timeUntilFlatDelayExpiredMS=0.0, timeUntilSwingDelayExpiredMS=0.0, timeUntilTouchDelayExpiredMS=0.0
11-26 12:15:30.188 1761-2477/? D/sensors_hal_LGMotionAccel: processInd: LP2: X: 1.027176 Y: 4.640945 Z: 8.011398 SAM TS: 153411799 HAL TS:135753777272948 elapsedRealtimeNano:135753856670678
11-26 12:15:30.311 10730-10730/com.example.hunte.assassin D/Error: ERR: exClass=java.lang.StackOverflowError
11-26 12:15:30.311 10730-10730/com.example.hunte.assassin D/Error: ERR: exMsg=stack size 8MB
11-26 12:15:30.311 10730-10730/com.example.hunte.assassin D/Error: ERR: file=Method.java
11-26 12:15:30.311 10730-10730/com.example.hunte.assassin D/Error: ERR: class=java.lang.reflect.Method
11-26 12:15:30.311 10730-10730/com.example.hunte.assassin D/Error: ERR: method=invoke line=-2
11-26 12:15:30.381 10730-10730/com.example.hunte.assassin D/Error: ERR: stack=java.lang.IllegalStateException: Could not execute method for android:onClick
   at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
   at android.view.View.performClick(View.java:5217)
   at android.view.View$PerformClick.run(View.java:21342)
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:148)
   at android.app.ActivityThread.main(ActivityThread.java:5551)
   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.reflect.InvocationTargetException
   at java.lang.reflect.Method.invoke(Native Method)
   at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
   at android.view.View.performClick(View.java:5217) 
   at android.view.View$PerformClick.run(View.java:21342) 
   at android.os.Handler.handleCallback(Handler.java:739) 
   at android.os.Handler.dispatchMessage(Handler.java:95) 
   at android.os.Looper.loop(Looper.java:148) 
   at android.app.ActivityThread.main(ActivityThread.java:5551) 
   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.StackOverflowError: stack size 8MB
   at java.lang.reflect.Method.invoke(Native Method)
   at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzax(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaE(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzaF(Unknown Source)
at com.google.android.gms.internal.zzbqi
11-26 12:15:30.383 10730-10730/? D/Error: ERR: TOTAL BYTES WRITTEN: 20167208
11-26 12:15:30.383 10730-10730/? E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 20167300)
11-26 12:15:30.383 10730-10730/? E/AndroidRuntime: Error reporting crash
android.os.TransactionTooLargeException: data parcel size 20167300 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:503)
at android.app.ActivityManagerProxy.handleApplicationCrash(ActivityManagerNative.java:4547)
at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:90)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)

據我所知,一個孩子下不能有很多價值觀。 嘗試一個接一個地設置值,每次為每個新玩家創建一個新子代。 mDatabase.child(“ Games”)。child(gameName).child(playerName); 更改playerName(在數組列表中i ++遞增),並為每個項目創建一個新的子代。

因此,事實證明我沒有一個准確的播放器構造函數(它實際上並沒有輸入名稱),但是我張貼我的代碼以防將來遇到類似的問題

public void beginGame(View view) {
    final FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference ref = database.getReference();

    EditText gameNameField = (EditText) findViewById(R.id.gameName);
    String gameName = gameNameField.getText().toString().trim();
    Collections.shuffle(players);
    if (gameName.isEmpty()) {
        int duration = Toast.LENGTH_LONG;

        Toast toast = Toast.makeText(getApplicationContext(),
                R.string.toast_no_game_name, duration);
        toast.show();

    } else if (playerNames.size() < 2) {
        int duration = Toast.LENGTH_LONG;

        Toast toast = Toast.makeText(getApplicationContext(),
                R.string.toast_not_enough_players, duration);
        toast.show();

    } else {
        for (int i = 0; i < players.size(); i++) {
            if (i != (players.size() - 1)) {
                players.get(i).target = players.get(i + 1);
            } else {
                players.get(i).target = players.get(0);
            }
        }
        Game game = new Game(gameName, players);
        DatabaseReference gamesRef = ref.child("Games").child(gameName).child("players");
        Map<String, Player> gamePlayers = new HashMap<>();
        for(int i = 0; i < players.size(); i++){
            Player currentPlayer = players.get(i);
            gamesRef.child(currentPlayer.getName()).setValue(currentPlayer);

        }

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM