在这篇文章中,我们将为您详细介绍如何在Firebase中获取所有子密钥?的内容,并且讨论关于firebase使用的相关问题。此外,我们还会涉及一些关于android–如何从firebase中的值获取密
在这篇文章中,我们将为您详细介绍如何在 Firebase 中获取所有子密钥?的内容,并且讨论关于firebase使用的相关问题。此外,我们还会涉及一些关于android – 如何从firebase中的值获取密钥、android – 如何在Item Click上从FirebaseListAdapter获取obj键. FirebaseUI、android – 如何获取所有孩子的数据在firebase数据库?、Firebase Firestore从集合中获取数据的知识,以帮助您更全面地了解这个主题。
本文目录一览:- 如何在 Firebase 中获取所有子密钥?(firebase使用)
- android – 如何从firebase中的值获取密钥
- android – 如何在Item Click上从FirebaseListAdapter获取obj键. FirebaseUI
- android – 如何获取所有孩子的数据在firebase数据库?
- Firebase Firestore从集合中获取数据
如何在 Firebase 中获取所有子密钥?(firebase使用)
使用 Firebase 的浅查询 https://firebase.google.com/docs/database/rest/retrieve-data#shallow
例如,如果您的数据结构如下
parent: {
child_0: {...<large data>...},child_1: {...<large data>...},child_2: "abc",child_3: 123
}
浅查询的结果将是:
parent: {
child_0: true,child_1: true,child_3: 123
}
,
某些意外错误可能会发送 cancel
事件并终止连接。在为此事件提供的数据中描述了原因。一些潜在原因如下: 1. Firebase 实时数据库规则不再允许在请求的位置读取。此原因的 data
描述是“权限被拒绝”。 2. 一次写入触发了一个事件流送器,它发送了一个超过我们的限制 512MB 的大型 JSON 树。此原因的 data
是“指定的有效负载太大,请请求数据较少的位置。”
由于实时数据库仅限制每个请求 500Mb,因此为了执行此请求,您应该尝试使用 child_added listener
分页查询或尝试迭代子项,而不是查询所有子项。
android – 如何从firebase中的值获取密钥
当我知道Firebase中的以下结构中的“name”字段包含“efg”时,如何获取密钥“-KLpcURDV68BcbAvlPFy”.
clubs
-KLpcURDV68BcbAvlPFy
dept: "abc"
desc: "xyz"
name: "efg"
-asdasdasddsad
dept: "asda"
desc: "asd"
name: "adddd"
我尝试了这个,但它返回了“俱乐部”
mDatabase.child("clubs").orderByChild("name").equalTo("efg").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String clubkey =dataSnapshot.getKey();
解决方法:
那是因为你正在使用ValueEventListener.如果查询匹配多个子节点,则返回所有这些子节点的列表.即使只有一个匹配的孩子,它仍然是一个列表.由于您在该列表上调用了getKey(),因此您将获得运行查询的位置的键.
要获取匹配子项的键,请遍历快照的子项:
mDatabase.child("clubs")
.orderByChild("name")
.equalTo("efg")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
String clubkey = childSnapshot.getKey();
但请注意,如果您认为俱乐部名称是唯一的,您可以将俱乐部存储在他们的名下,并在没有查询的情况下访问正确的俱乐部:
mDatabase.child("clubs")
.child("efg")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String clubkey = dataSnapshot.getKey(); // will be efg
android – 如何在Item Click上从FirebaseListAdapter获取obj键. FirebaseUI
在firebaseui中继承Firebaselistadapter时,如何获取单击项目的obj键?
Firebaselistadapter具有以下获取itemId的方法,但返回long.但我需要使用默认字符串格式的对象键.
public long getItemId(int i) {
return (long)this.mSnapshots.getItem(i).getKey().hashCode();
}
解决方法:
Firebaselistadapter假定您始终知道要与之交互的项目的索引/位置.鉴于Android上下文这是有道理的,因为集合视图是基于索引的.
知道该位置后,可以调用adapter.getRef(position)
以获取对象的Firebase引用.在该引用上,您可以调用getKey()
来获取密钥.虽然我建议只做这个作为最后的手段.
android – 如何获取所有孩子的数据在firebase数据库?
我需要收到用户的所有电话号码,我应该使用哪个听众来收集所有的孩子?
每个用户被添加为一个对象,用户ID作为该对象的名称,我需要检索这个对象,而不知道用户ID
我搜索的文档,它与DataSnapshot相关,但我无法得到没有监听器的DataSnapshot!寻求DataSnapshout是正确的,还是使用别的东西
解决方法
//Get datasnapshot at your "users" root node DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users"); ref.addListenerForSingleValueEvent( new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { //Get map of users in datasnapshot collectPhoneNumbers((Map<String,Object>) dataSnapshot.getValue()); } @Override public void onCancelled(DatabaseError databaseError) { //handle databaseError } });
然后循环访问用户,访问他们的地图并收集电话字段.
private void collectPhoneNumbers(Map<String,Object> users) { ArrayList<Long> phoneNumbers = new ArrayList<>(); //iterate through each user,ignoring their UID for (Map.Entry<String,Object> entry : users.entrySet()){ //Get user map Map singleUser = (Map) entry.getValue(); //Get phone field and append to list phoneNumbers.add((Long) singleUser.get("phone")); } System.out.println(phoneNumbers.toString()); }
这个监听器只有在显式调用时才会检索数据捕获.考虑除了您的用户节点之外,还存储“allPhoneNumbers”节点下的数字列表.这将使您的数据更新更轻,更容易处理时收集所有数字.如果你说数百个用户,“用户”数据快照将会变得太大,“allPhoneNumbers”列表的效率会更高.
上面的代码已经在您的示例数据库上进行了测试,并且工作正常但是,根据用户的电话实例字段的类型,您的手机字段可能需要转换为String或int.
Firebase Firestore从集合中获取数据
我想从Firebase Firestore数据库获取数据。我有一个名为user的集合,每个用户都有一些相同类型的对象(My
Java自定义对象)的集合。我想在创建我的活动时用这些对象填充ArrayList。
private static ArrayList<Type> mArrayList = new ArrayList<>();;
在onCreate()中:
getListItems();Log.d(TAG, "onCreate: LIST IN ONCREATE = " + mArrayList);*// it logs empty list here
调用以获取项目列表的方法:
private void getListItems() { mFirebaseFirestore.collection("some collection").get() .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() { @Override public void onSuccess(QuerySnapshot documentSnapshots) { if (documentSnapshots.isEmpty()) { Log.d(TAG, "onSuccess: LIST EMPTY"); return; } else { for (DocumentSnapshot documentSnapshot : documentSnapshots) { if (documentSnapshot.exists()) { Log.d(TAG, "onSuccess: DOCUMENT" + documentSnapshot.getId() + " ; " + documentSnapshot.getData()); DocumentReference documentReference1 = FirebaseFirestore.getInstance().document("some path"); documentReference1.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() { @Override public void onSuccess(DocumentSnapshot documentSnapshot) { Type type= documentSnapshot.toObject(Type.class); Log.d(TAG, "onSuccess: " + type.toString()); mArrayList.add(type); Log.d(TAG, "onSuccess: " + mArrayList); /* these logs here display correct data but when I log it in onCreate() method it''s empty*/ } }); } } } } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText(getApplicationContext(), "Error getting data!!!", Toast.LENGTH_LONG).show(); } });}
答案1
小编典典该get()
操作返回a Task<>
,这意味着它是一个 异步操作
。调用getListItems()
仅启动操作,它不等待操作完成,因此您必须添加成功和失败侦听器。
尽管您无法对操作的异步性质做很多事情,但是可以按照以下方式简化代码:
private void getListItems() { mFirebaseFirestore.collection("some collection").get() .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() { @Override public void onSuccess(QuerySnapshot documentSnapshots) { if (documentSnapshots.isEmpty()) { Log.d(TAG, "onSuccess: LIST EMPTY"); return; } else { // Convert the whole Query Snapshot to a list // of objects directly! No need to fetch each // document. List<Type> types = documentSnapshots.toObjects(Type.class); // Add all to your list mArrayList.addAll(types); Log.d(TAG, "onSuccess: " + mArrayList); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText(getApplicationContext(), "Error getting data!!!", Toast.LENGTH_LONG).show(); } });}
我们今天的关于如何在 Firebase 中获取所有子密钥?和firebase使用的分享就到这里,谢谢您的阅读,如果想了解更多关于android – 如何从firebase中的值获取密钥、android – 如何在Item Click上从FirebaseListAdapter获取obj键. FirebaseUI、android – 如何获取所有孩子的数据在firebase数据库?、Firebase Firestore从集合中获取数据的相关信息,可以在本站进行搜索。
本文标签: