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