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

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

问题描述

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


$ b 这是模型 用户类:

  public class User {

ArrayList< User>电子邮件;

public User(){}

public ArrayList< User> getEmail(){
返回电子邮件;

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




$ p $获得电子邮件 userslist ,我用这个逻辑。
$ b

 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());
}


  com.google.firebase.database.DatabaseException:无法将类型为java.util.ArrayList的对象转换为com.apvolution.amapp.model.User 

如何从 userslist <$ c $获取'email c>字段?如何循环遍历整个 usersList?



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

  amapp-731b2addclose 
+信息
+版本
- 用户列表
- 电子邮件
|
| - 0:abc@gmail.com
| - 1:xyz@gmail.com
| - 2:ghi@gmail.com
| - 3:mno@gmail.com

LogCat详情:

  05  -  13 21:59:37.418 16387  -  16387 / com.apvolution.bcm E / AndroidRuntime:致命例外:main 
过程:com。 apvolution.bcm,PID:16387
com.google.firebase.database.DatabaseException:无法将类型为java.lang.String的对象转换为com.apvolution.amapp.model.User
在com .google.android.gms.internal.zzbtg.zze(未知来源)
,位于com.google.android.gms.internal.zzbtg.zzb(未知来源)
,位于com.google.android.gms .internal.zzbtg.zza(未知来源)
在com.google.android.gms.internal.zzbtg.zza(未知来源)
来自com.google.android.gms.internal.zzbtg.zza (未知来源)
在com.google.android.gms.internal.zzbtg.zza(未知来源)
来自com.google.firebase.database.DataSnapshot.getValue(未知来源)
在com.aprore.bcm.MainActivity $ 3.onDataChange(MainActivity.java:260)
com.google.android.gms.internal.zzbpx.zza(Unknown Source )
在com.google.android.gms.internal.zzbqx.zzZT(未知来源)
在com.google.android.gms.internal.zzbra $ 1.run(未知来源)
在android.os.Handler.handleCallback(Handler.java:751)
在android.os.Handler.dispatchMessage(Handler.java:95)
在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< String,Object>中的类型map = new HashMap<>(); 并且你的问题将被解决。

dataSnapshot 对象,请使用以下代码:

  DatabaseReference yourRef = FirebaseDatabase.getInstance()。 getReference()子( userslist)子( 电子邮件)。; 
ValueEventListener eventListener = new ValueEventListener(){
@Override $ b $ public void onDataChange(DataSnapshot dataSnapshot){
String firstEmail =(String)dataSnapshot.child(0)。getValue ();
String secondEmail =(String)dataSnapshot.child(1)。getValue();
字符串thirdEmail =(String)dataSnapshot.child(3)。getValue();
字符串fourthEmail =(String)dataSnapshot.child(4)。getValue();
}

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

希望有帮助。


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. ?

This is the model User class:

public class User {

    ArrayList<User> email;

    public User() {}

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

    public void setEmail(ArrayList<User> email) {
        this.email = 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

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

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 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)

解决方案

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.

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);

Hope it helps.

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

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