检索子值 -firebase-
Posted
技术标签:
【中文标题】检索子值 -firebase-【英文标题】:Retrieving child value -firebase- 【发布时间】:2016-10-27 07:56:49 【问题描述】:System.out.println(ref.child("mostafa_farahat22@yahoo.com").child("_email"));
*我正在尝试获取 child 的值,但我一直获取该值的 URL 当我尝试使用此代码时,如何获取此 URL 的值,但它让我得到了我想要获取 _email 值的 URL。
【问题讨论】:
【参考方案1】:您从错误的角度看待这个概念。
在使用ref.child("mostafa_farahat22@yahoo.com").child("_email")
时,您只是简单地指向数据库中的特定位置,仅此而已。
如果您想检索该特定位置的数据,请考虑以下两种方式。
首先,如果您只想检索一次数据,您可以执行以下操作:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
DatabaseReference mostafa = ref.child("Users").child("mostafa_farahat22@yahoo.com").child("_email");
mostafa.addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(DataSnapshot dataSnapshot)
String email = dataSnapshot.getValue(String.class);
//do what you want with the email
@Override
public void onCancelled(DatabaseError databaseError)
);
或者您可能想实时检索该值并在数据库值更改的同时使用它,所有这些都在同一时间,每当值更改时,您就使用这个:
mostafa.addValueEventListener(new ValueEventListener()
@Override
public void onDataChange(DataSnapshot dataSnapshot)
String email = dataSnapshot.getValue(String.class);
display.setText(email);
@Override
public void onCancelled(DatabaseError databaseError)
);
注意这两种方法的区别。第一个仅用于一次检索,第二个用于在值更改时检索数据。
请记住,我发布的代码只是模板,可能需要使用它们。
【讨论】:
addValueEventListener 设置后是否会被触发一次? @SreekanthKarumanaghat 我不这么认为。当从 Firebase 数据库向其推送数据时应该触发它。 @Ramtin 不,我检查过,它在开始时被触发一次。【参考方案2】:使用ref.child("mostafa_farahat22@yahoo.com").child("_email")
,您只是设置对对象的引用。看看java firebase documentation to retrieve data。
要获取数据,您需要设置一个侦听器以供参考
ref.child("mostafa_farahat22@yahoo.com").child("_email").addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(DataSnapshot snapshot)
// data available in snapshot.value()
@Override
public void onCancelled(FirebaseError firebaseError)
);
【讨论】:
以上是关于检索子值 -firebase-的主要内容,如果未能解决你的问题,请参考以下文章