2017-04-10 74 views
0

我一直在試圖從火力數據庫,但每次我這樣做,給我一個錯誤長更新......這是我的火力地堡數據庫:groups firebase database更新長從火力數據庫

mDatabaseGroup.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      final String team_a = (String) dataSnapshot.child("Team_A").child("team_name").getValue(); 
      final long team_ad = (long) dataSnapshot.child("Team_A").child("d").getValue(); 
      final long team_al = (long) dataSnapshot.child("Team_A").child("l").getValue(); 
      final long team_ap = (long) dataSnapshot.child("Team_A").child("p").getValue(); 
      final long team_aw = (long) dataSnapshot.child("Team_A").child("w").getValue(); 
      final long team_apts = (long) dataSnapshot.child("Team_A").child("pts").getValue(); 
      final String team_b = (String) dataSnapshot.child("Team_B").child("team_name").getValue(); 
      final long team_bd = (long) dataSnapshot.child("Team_B").child("d").getValue(); 
      final long team_bl = (long) dataSnapshot.child("Team_B").child("l").getValue(); 
      final long team_bp = (long) dataSnapshot.child("Team_B").child("p").getValue(); 
      final long team_bw = (long) dataSnapshot.child("Team_B").child("w").getValue(); 
      final long team_bpts = (long) dataSnapshot.child("Team_B").child("pts").getValue(); 
      final String team_c = (String) dataSnapshot.child("Team_C").child("team_name").getValue(); 
      String team_d = (String) dataSnapshot.child("Team_D").child("team_name").getValue();} 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

這是我的錯誤「M面對:

ClassCastException異常:java.lang.String中不能轉換爲java.lang.Long中

這是我的堆棧跟蹤:

D/NativeCrypto: ssl=0x56944ba8 sslWrite buf=0x427180f8 len=99 write_timeout_millis=0 
D/NativeCrypto: sslNotify, appData=0x5807ff10 ret=1 
D/NativeCrypto: sslSelect, appData=0x5807ff10 woken up by a token 
D/NativeCrypto: sslSelect, appData=0x5807ff10 read ret=1 
D/SQLiteDatabase: beginTransaction() 
D/SQLiteDatabase: endTransaction() 
D/AndroidRuntime: Shutting down VM 
W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x4187ece0) 
W/dalvikvm: threadid=1: uncaught exception occurred 
W/System.err: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long 
W/System.err:  at com.example.zack.admin.ViewFixtureActivity$1.onDataChange(ViewFixtureActivity.java:85) 
W/System.err:  at com.google.android.gms.internal.zzaih.zza(Unknown Source) 
W/System.err:  at com.google.android.gms.internal.zzajh.zzctc(Unknown Source) 
W/System.err:  at com.google.android.gms.internal.zzajk$1.run(Unknown Source) 
W/System.err:  at android.os.Handler.handleCallback(Handler.java:808) 
W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:103) 
W/System.err:  at android.os.Looper.loop(Looper.java:193) 
W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5299) 
W/System.err:  at java.lang.reflect.Method.invokeNative(Native Method) 
W/System.err:  at java.lang.reflect.Method.invoke(Method.java:515) 
W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 
W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) 
W/System.err:  at dalvik.system.NativeStart.main(Native Method) 
W/dalvikvm: threadid=1: calling UncaughtExceptionHandler 
E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.example.zack.admin, PID: 26018 
        java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long 
         at com.example.zack.admin.ViewFixtureActivity$1.onDataChange(ViewFixtureActivity.java:85) 
         at com.google.android.gms.internal.zzaih.zza(Unknown Source) 
         at com.google.android.gms.internal.zzajh.zzctc(Unknown Source) 
         at com.google.android.gms.internal.zzajk$1.run(Unknown Source) 
         at android.os.Handler.handleCallback(Handler.java:808) 
         at android.os.Handler.dispatchMessage(Handler.java:103) 
         at android.os.Looper.loop(Looper.java:193) 
         at android.app.ActivityThread.main(ActivityThread.java:5299) 
         at java.lang.reflect.Method.invokeNative(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:515) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) 
         at dalvik.system.NativeStart.main(Native Method) 

如果有人知道更新作多火力點的另一種方式,它也歡迎。

+0

你有沒有檢查任何值是否有字符串數據,你是用字符串類型轉換? 由於根據錯誤,您正在解析任何具有字符串的數據,並且您將直接轉換爲字符串。 請參考使用POJO類獲取數據,這是更好的解析對象數據的選項。 – ashish

回答

0

使用String.valueOf()的地方,如果有(String)

String.valueOf(dataSnapshot.child("Team_C").child("team_name").getValue());

+0

謝謝,我試過了,但它給了我這個錯誤:com.google.firebase.database.DatabaseException:無法將java.lang.String類型的值轉換爲long – Zack

0

鑄造首先,確保你的DatabaseReference mDatabaseGroup是在/Groups/Key/A正確的位置,讓你從數據庫中獲取正確的價值觀。

其次,儘量

final long team_ad = dataSnapshot.child("Team_A").child("d").getValue(Long.class); 
1

如果你想閱讀與長型(即/組/ -Kh2GRPKiuQdePCubLi0/A/Team_A/d)爲單個值,你可以編寫象下面這樣:

FirebaseDatabase.getInstance().getReference("Groups/-Kh2GRPKiuQdePCubLi0/A/Team_A/d").addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      Long team_ad = dataSnapshot.getValue(Long.class); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

如果從參考(組/ -Kh2GRPKiuQdePCubLi0/A)讀取,則可能編碼象下面這樣:

// Create a model class for your dataSnapshot 
public static class Team { 
    public long d; 
    public long l; 
    public long p; 
    public long pts; 
    public String team_name; 
    public long w; 

    public Team() { 
     // Default constructor required for calls to DataSnapshot.getValue(Team.class) 
    } 
} 
// Read from database 
FirebaseDatabase.getInstance().getReference("Groups/-Kh2GRPKiuQdePCubLi0/A").addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for(DataSnapshot childDataSnapShot: dataSnapshot.getChildren()){ 
       Team team = childDataSnapShot.getValue(Team.class); 
       switch (childDataSnapShot.getKey()) 
       { 
        case "Team_A": 
         final String team_a = team.team_name; 
         final long team_ad = team.d; 
         final long team_al = team.l; 
         final long team_ap = team.p; 
         final long team_aw = team.w; 
         final long team_apts = team.pts; 
         break; 
        case "Team_B": 
         final String team_b = team.team_name; 
         final long team_bd = team.d; 
         final long team_bl = team.l; 
         final long team_bp = team.p; 
         final long team_bw = team.w; 
         final long team_bpts = team.pts; 
         break; 
        case "Team_C": 
         final String team_c = team.team_name; 
         final long team_cd = team.d; 
         final long team_cl = team.l; 
         final long team_cp = team.p; 
         final long team_cw = team.w; 
         final long team_cpts = team.pts; 
         break; 
        default: 
         break; 
       } 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      // Getting Team failed, log a message 
      Log.w(LOG_TAG, "loadTeam:onCancelled ", databaseError.toException()); 
     } 
    }); 
} 

參考: https://firebase.google.com/docs/database/android/read-and-write#read_and_write_data