无法从Firebase数据库获取数组值 [英] Not able to get the array values from firebase database
问题描述
我试图检查登录用户是否是Firebase数据库中JSON数组的授权用户。如何从Firebase获取电子邮件字段的价值?
$ b 这是模型
用户
类:public class User {
$ p $但是,当我尝试从数据库中获取电子邮件时,出现以下异常和应用程序崩溃。
ArrayList< User>电子邮件;
public User(){}
public ArrayList< User> getEmail(){
返回电子邮件;
$ b $ public void setEmail(ArrayList< User> email){
this.email = email;
$ p $获得电子邮件
从userslist
,我用这个逻辑。
$ busersListDatabaseReference.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
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 'email
from the
userslistfield ? How do I loop through the entire
usersList` ?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 aMap
. Change the type inMap<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屋!