2017-04-20 48 views
0

我目前正在使用firebase存储所有信息,我使用firebase身份验证进行了用户注册,并将该用户扩展为重用身份验证中创建的ID的数据库,现在我需要获取所有用户并进行比较他的手机与手机中插入与用户和retrive特定用户,如果号码匹配,所以我这样做:数据快照失败转换

代码

FirebaseDatabase.getInstance().getReference().child("Users") 
       .addListenerForSingleValueEvent(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
          Log.d("snapshot", String.valueOf(snapshot)); 
          Log.d("snap",String.valueOf(snapshot.getValue(User.class))); 
          User user = snapshot.getValue(User.class); 
          if(number.equals(String.valueOf(user.getPhone()))){ 
           userFriend = user; 
          } 

         } 

         if(userFriend == null){ 
          //to do snackbar 
         } 
        } 

User类

public class User { 

    private String id; 
    private String username; 
    private int age = -1; 
    private String phone; 
    private int gamesPlayed = 0; 
    private ArrayList<User> friends = new ArrayList<User>(); 

    // CONSTRUCTOR 
    public User() { 

    } 

    public User(String username) { 
     this.username = username; 
    } 

    // GETTERS & SETTERS 
    public String getUsername() { return username; } 
    public void setUsername(String username) { this.username = username; } 

    public User(String id, String username, int age, String phone, int gamesPlayed, ArrayList<User> users) { 
     this.id = id; 
     this.username = username; 
     this.age = age; 
     this.phone = phone; 
     this.gamesPlayed = gamesPlayed; 
     this.friends = users; 
    } 

    public int getAge() { return age; } 
    public void setAge(int age) { this.age = age; } 

我的数据库结构:

1

这里是我所得到的堆栈跟踪:

04-20 16:06:04.070 30972-30972/com.esmad.pdm.friendlymanager E/AndroidRuntime: FATAL EXCEPTION: main 
                       Process: com.esmad.pdm.friendlymanager, PID: 30972 
    com.google.firebase.database.DatabaseException: Failed to convert value of type java.lang.Long to String 
     at com.google.android.gms.internal.zzbtg.zzaF(Unknown Source) 
     at com.google.android.gms.internal.zzbtg.zzb(Unknown Source) 
     at com.google.android.gms.internal.zzbtg.zza(Unknown Source) 
     at com.google.android.gms.internal.zzbtg.zzb(Unknown Source) 
     at com.google.android.gms.internal.zzbtg$zza.zze(Unknown Source) 
     at com.google.android.gms.internal.zzbtg$zza.zzaH(Unknown Source) 
     at com.google.android.gms.internal.zzbtg.zze(Unknown Source) 
     at com.google.android.gms.internal.zzbtg.zzb(Unknown Source) 
     at com.google.android.gms.internal.zzbtg.zza(Unknown Source) 
     at com.google.firebase.database.DataSnapshot.getValue(Unknown Source) 
     at com.esmad.pdm.friendlymanager.Friends$1.onDataChange(Friends.java:61) 
     at com.google.firebase.database.Query$1.onDataChange(Unknown Source) 
     at com.google.android.gms.internal.zzbpx.zza(Unknown Source) 
     at com.google.android.gms.internal.zzbqx.zzZS(Unknown Source) 
     at com.google.android.gms.internal.zzbra$1.run(Unknown Source) 
     at android.os.Handler.handleCallback(Handler.java:751) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:154) 
     at android.app.ActivityThread.main(ActivityThread.java:6119) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
     at com.android.internal.os.ZygoteInit.main 

(ZygoteInit.java:776)

错误与此行有关:User user = snapshot.getValue(User.class);

我怀疑它对我构建我的用户模型和检索的数据的方式有所影响,但某些内容不兼容。我有2 int在我的模型gamesPlayed和年龄,但是当我将用户传递到快照我不知道如何CAS 2特定的值,所以我可以通过他们做我需要redifine用户实例吗?或者是一切正常,请帮助我很困惑:/`

回答

0

在您的用户类中您的手机字段必须是Long类型。

+0

为什么它不能是字符串类型? –

+0

因为您没有将它作为字符串存储在数据库中,所以如果您想要将其作为字符串检索,请将数字之间的电话号码放在数据库中的引号之间,如“91351246”。我强烈建议您将它们保存为字符串,以便稍后格式化它们 – wnieves19