我目前正在使用firebase存储我的所有信息,我使用firebase身份验证进行了用户注册,并将该用户扩展到数据库,重用在身份验证中创建的id,现在我需要获取所有用户,并将他的手机与插入的电话进行比较,并在号码匹配时检索该特定用户,因此我这样做了:
码
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
}
}用户类
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; }我的数据库结构:

,下面是我在堆栈跟踪中得到的信息:
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);
我怀疑这与我构建用户模型的方式和我检索的数据有关,有些东西是不兼容的。我的模型gamesPlayed和年龄有2个int,但是当我将用户传递给快照时,我不知道如何传递cas 2特定的值,这样我就可以传递它们了,我需要重新定义用户实例吗?或者一切都好,请帮我弄糊涂:/‘
发布于 2017-04-20 20:31:12
在您的用户类中,您的电话字段必须是Long类型。
https://stackoverflow.com/questions/43529014
复制相似问题