无法从 firebase 数据库中获取数组值 [英] Not able to get the array values from firebase database

查看:42
本文介绍了无法从 firebase 数据库中获取数组值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从 Firebase 数据库中的 JSON 数组中检查 登录 用户是否是授权用户.如何从 Firebase 获取电子邮件字段的值.?

I'm trying to check whether the signed in user is an authorized user from the JSON array in Firebase Database. How do I get the value of email field from Firebase. ?

这是模型 User 类:

public class User {

    ArrayList<User> email;

    public User() {}

    public ArrayList<User> getEmail() {
        return email;
    }

    public void setEmail(ArrayList<User> email) {
        this.email = email;
    }
}

为了从 userslist 获取 email,我使用了这个逻辑.

For getting the email from userslist, I used this logic.

usersListDatabaseReference.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        User userEmail = dataSnapshot.getValue(User.class);
                        ArrayList<String> userEmailFromDatabase = userEmail.getEmail();
                        Log.d(TAG, "User email from Database: "+userEmailFromDatabase);
                        Log.d(TAG, "Logged in User email: " + user.getEmail());
                    }

但是当我尝试从数据库中获取电子邮件时,我收到以下异常并且我的应用程序崩溃了.

But when I try to get the emails from the the database I get the following exception and my app crashes.

com.google.firebase.database.DatabaseException: Can't convert object of type java.util.ArrayList to type com.apvolution.amapp.model.User

如何从 userslist 字段获取电子邮件"?如何遍历整个usersList`?

How do I get an 'emailfrom theuserslistfield ? How do I loop through the entireusersList` ?

这是我的 Firebase 控制台中的数据库结构.

This is the database structure in my Firebase console.

amapp-731b2addclose
   + messages
   + version
   - userslist
      - email
         |
         | -- 0: "abc@gmail.com"
         | -- 1: "xyz@gmail.com"
         | -- 2: "ghi@gmail.com"
         | -- 3: "mno@gmail.com"

LogCat 详细信息:

LogCat details:

05 - 13 21: 59: 37.418 16387 - 16387 / com.apvolution.bcm E / AndroidRuntime: FATAL EXCEPTION: main
Process: com.apvolution.bcm, PID: 16387
com.google.firebase.database.DatabaseException: Can 't convert object of type java.lang.String to type com.apvolution.amapp.model.User
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.android.gms.internal.zzbtg.zza(Unknown Source)
at com.google.android.gms.internal.zzbtg.zza(Unknown Source)
at com.google.android.gms.internal.zzbtg.zza(Unknown Source)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
at com.apvolution.bcm.MainActivity$3.onDataChange(MainActivity.java: 260)
at com.google.android.gms.internal.zzbpx.zza(Unknown Source)
at com.google.android.gms.internal.zzbqx.zzZT(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: 6123)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 757)

推荐答案

问题是您试图将数据存储在 ArrayList 而不是 Map.更改Map中的类型map = new HashMap<>();,你的问题就解决了.

The probem is that you are trying to store your data in an ArrayList in stead of a Map. Change the type in Map<String, Object> map = new HashMap<>(); and your problem will be solved.

要从 dataSnapshot 对象中获取数据,请使用以下代码:

To get you data out from the dataSnapshot object, please use this code:

DatabaseReference yourRef = FirebaseDatabase.getInstance().getReference().child("userslist").child("email");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String firstEmail = (String) dataSnapshot.child("0").getValue();
        String secondEmail = (String) dataSnapshot.child("1").getValue();
        String thirdEmail = (String) dataSnapshot.child("3").getValue();
        String fourthEmail = (String) dataSnapshot.child("4").getValue();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
yourRef.addListenerForSingleValueEvent(eventListener);

希望有帮助.

这篇关于无法从 firebase 数据库中获取数组值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆