首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据快照转换失败

数据快照转换失败
EN

Stack Overflow用户
提问于 2017-04-20 20:12:01
回答 1查看 107关注 0票数 0

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

代码语言:javascript
复制
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
                        }
                    }

用户类

代码语言:javascript
复制
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; }

我的数据库结构:

,下面是我在堆栈跟踪中得到的信息:

代码语言:javascript
复制
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特定的值,这样我就可以传递它们了,我需要重新定义用户实例吗?或者一切都好,请帮我弄糊涂:/‘

EN

回答 1

Stack Overflow用户

发布于 2017-04-20 20:31:12

在您的用户类中,您的电话字段必须是Long类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43529014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档