小编Ale*_*amo的帖子

从Firestore中选择随机文档

我在Cloud Firestore的单个集合中有1000个文档,是否可以提取随机文档?

举例来说:Students是Firestore中的一个集合,我有1000个学生,我的要求是每次通话随机选择10个学生。

java android firebase google-cloud-firestore

5
推荐指数
1
解决办法
4214
查看次数

使用Firebase-UI的Firestore聊天应用(Android)

我正在尝试使用Cloud Firestore的Firebase-UI库创建聊天。 这个 github仓库包含我正在使用的相关代码。问题与查询的顺序有关。

看到查询指定为:

Query sChatQuery = sChatCollection.orderBy("timestamp").limit(50);
Run Code Online (Sandbox Code Playgroud)

但是,我以正确的顺序(从旧到新)获得了最旧的50条消息,而不是最新的消息。另一方面,我可以使用以下查询:

Query sChatQuery = sChatCollection.orderBy("timestamp", Query.Direction.DESCENDING).limit(50);
Run Code Online (Sandbox Code Playgroud)

这会检索50条最新消息,但顺序错误(最新消息排在最前面,最旧消息排在最下面)。因此,我不知道该怎么做。

我可以在本地再次反转查询的结果,但是我无法弄清楚该怎么做(我已经走过了FirebaseUI库,但运气不佳)。

编辑

chat对于events集合中的每个事件,我都有其子集合:

events/event_doc/chat/chat_doc

在此处输入图片说明

我想得到如下消息:

Message 1
Message 2
Message 3
Message 4
...
Run Code Online (Sandbox Code Playgroud)

使用默认顺序,我会收到如上所示的消息,但是limit说明将快照从1减少到50,并且Message 51(最新的)快照未被检索。

java android firebase firebaseui google-cloud-firestore

5
推荐指数
1
解决办法
1389
查看次数

如何从Firestore Android中的集合中获取文档列表

我的Firestore数据库结构:

|
|=>root_collection
                  |
                  |=>doc1
                         |                  
                         |=>collection
                  |
                  |=>doc2
                         |                  
                         |=>collection
                  |
                  |=>doc3
                         |                  
                         |=>collection
Run Code Online (Sandbox Code Playgroud)

现在我想从中获取文件清单root_collection。将有一个包含以下数据的列表{"doc1", "doc2", "doc3"}。我需要它是因为我想制作一个微调器并将这些数据放入微调器中。然后,用户将选择一些文档并下载。

我尝试使用下面的代码:

firestore.collection("root_collection")
            .get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {
                        for (QueryDocumentSnapshot document : task.getResult()) {
                            Log.d(TAG,document.getId() + " => " + document.getData());
                        }
                    } else {
                        Log.d(TAG, "Error getting documents: ", task.getException());
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

但是代码只有在我拥有文档中没有集合的数据结构时才起作用。在其他情况下,中没有任何文档QueryDocumentSnapshot

谢谢!

java android firebase google-cloud-firestore

5
推荐指数
1
解决办法
9225
查看次数

Firestore - 在本地合并两个查询

由于ORFirestore中没有逻辑运算符,因此我尝试在本地合并2个单独的查询.

现在我想知道如何保持结果的正确顺序.当我独立运行2个查询时,我无法特定地查询结果(至少不是我使用该orderBy方法从Firestore获得结果的顺序).

我的想法是将第二个查询放在onSuccessListener第一个查询中.这是一个表现明智的坏主意吗?

public void loadNotes(View v) {
    collectionRef.whereLessThan("priority", 2)
            .orderBy("priority")
            .get()
            .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                @Override
                public void onSuccess(QuerySnapshot queryDocumentSnapshots) {

                    for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
                        Note note = documentSnapshot.toObject(Note.class);
                        //adding the results to a List
                    }

                    collectionRef.whereGreaterThan("priority", 2)
                            .orderBy("priority")
                            .get()
                            .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                                @Override
                                public void onSuccess(QuerySnapshot queryDocumentSnapshots) {

                                    for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
                                        Note note = documentSnapshot.toObject(Note.class);
                                        //adding the results to a List
                                    }
                                }
                            });
                }
            });
}
Run Code Online (Sandbox Code Playgroud)

java android firebase google-cloud-firestore

5
推荐指数
1
解决办法
2315
查看次数

DebugView 没有可用的设备

我正在对一个小应用程序进行一些测试,以了解 firebase-analytics 的工作原理。这是 MainActivity 的代码:

public class MainActivity extends AppCompatActivity {
private FirebaseAnalytics mFirebaseAnalytics;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mFirebaseAnalytics = FirebaseAnalytics.getInstance(getApplicationContext());

    mFirebaseAnalytics.setAnalyticsCollectionEnabled(true);

    mFirebaseAnalytics.setMinimumSessionDuration(10000);

    mFirebaseAnalytics.setSessionTimeoutDuration(300);

    Bundle bundle = new Bundle();
    bundle.putString(FirebaseAnalytics.Param.ITEM_ID,"ID");
    bundle.putString(FirebaseAnalytics.Param.ITEM_NAME,"NAME");
    bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE,"image");

    mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle);
}
Run Code Online (Sandbox Code Playgroud)

要查看我的应用程序是否将数据发送到 Firebase,我尝试使用 DebugView 但它说没有任何设备可用,我还使用了命令

adb shell setprop debug.firebase.analytics.app <package_name>  
Run Code Online (Sandbox Code Playgroud)

但什么都没有改变。
如果我使用这 3 个命令

adb shell setprop log.tag.FA VERBOSE
adb shell setprop log.tag.FA-SVC VERBOSE
adb logcat -v time -s FA FA-SVC
Run Code Online (Sandbox Code Playgroud)

我可以看到我的应用程序正在向 firebase 发送一些数据,如图所示

我该怎么做才能启用 DebugView 并实时查看我的应用发送到 Firebase 的内容?

java android firebase firebase-analytics

5
推荐指数
2
解决办法
8513
查看次数

如何检索 firebase 集合中的最后一个文档。我还想获取文档字段值

如何从 Cloud Firestore 集合中检索最后一个文档?我还想获取文档字段值。

这是下图:

在此处输入图片说明

java android firebase google-cloud-firestore

5
推荐指数
1
解决办法
5981
查看次数

使用whereArrayContains搜索的效率

我对使用此代码在集合中搜索文档的效率感到好奇。随着集合中文档数量的增加和数组中项目的数量的增加,这种搜索会变得非常低效吗?是否有更好的方法可以执行此操作,或者可以对数据库进行模式更改以更好地优化此方法?在哪里可以找到Firestore文档的这些功能的时间复杂性?

Query query = db.collection("groups").whereArrayContains("members", userid);
Run Code Online (Sandbox Code Playgroud)


替代解决方案

我最初想尝试将组ID存储在该用户下,以便仅抓取该当前用户的组,但是遇到了问题,而且从未找到使用多个ID进行查询来设置FireStoreRecyclerOptions的解决方案。

例:

for(String groupid : list) {
    Query query = db.collection("test-groups").document(groupid);

    FirestoreRecyclerOptions<GroupResponse> response = new FirestoreRecyclerOptions.Builder<GroupResponse>()
            .setQuery(query, GroupResponse.class)
            .build();
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以向其中添加多个查询FirestoreRecyclerOptions

java android firebase firebaseui google-cloud-firestore

5
推荐指数
1
解决办法
595
查看次数

从 Firestore 集合中检索文档 ID (Android)

我正在尝试提取文档下自动生成的 ID,以便我可以在其他地方使用它。

这是完整的代码:

mStartChatButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            final HashMap<String, Object> myChatFields = new HashMap<>();
            myChatFields.put("dateJoined", ServerValue.TIMESTAMP );
            myChatFields.put("status", "");
            myChatFields.put("snoozeUntil", "");
            myChatFields.put("myCharacter", "");
            myChatFields.put("requestedCustomChatCode", "");
            myChatFields.put("groupChatName", "");
            myChatFields.put("toInviteMembers", "");
            myChatFields.put("lastMessage", "");
            myChatFields.put("lastMessageTimeStamp", ServerValue.TIMESTAMP);

            mWhammyUsersCollection.document(mCurrentUserId).collection("my-chats")
                    .document().set(myChatFields)
                    .addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {

                    String chatId = mWhammyUsersCollection.document(mCurrentUserId)
                            .collection("my-chats").document().getId();

                    Log.v("CHATS", chatId);

                    myChatFields.put("chatCardId", chatId);

                    Intent goToChatActivity = new Intent(UserProfileActivity.this,
                            ChatActivity.class);
                    startActivity(goToChatActivity);

                }
            });
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在使用下面所示的代码生成一个名为“my-chats”的集合,并且 .document() 正在创建自动生成的文档 ID。

mWhammyUsersCollection.document(mCurrentUserId).collection("my-chats")
                    .document().set(myChatFields)
                    .addOnSuccessListener(new OnSuccessListener<Void>() {
Run Code Online (Sandbox Code Playgroud)

然后我使用下面显示的代码行尝试从该文档获取 id。

String chatId …
Run Code Online (Sandbox Code Playgroud)

java android firebase google-cloud-firestore

5
推荐指数
1
解决办法
2万
查看次数

Android Firebase如何处理实时服务器到本地数据库的连接

至于关于这个主题和类似的问题ChildEventListener,没有相关的答案,所以继承我的.

我有一个本地SQLite数据库,其中包含所有数据,我还有Firebase实时数据库,我正在使用新条目或所有用户的实时更改进行更新.我目前正在使用ChildEventListener如下方法:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getDatabase().getReference();
    DatabaseReference childRef = rootRef.child("my_root");

    ChildEventListener eventListener = new ChildEventListener()
    {
        ....
    };
    childRef.addChildEventListener(eventListener);
Run Code Online (Sandbox Code Playgroud)

至于功能,使用此代码,我可以获得有关孩子的实时更改,获取新条目,删除子项以及我需要的所有内容但有一个问题.当监听器的这个特定活动加载时,onChildAdded监听器会在该根上为每个孩子调用大量的时间,如文档中所述:

child_added为每个现有子项触发一次,然后每次将新子项添加到指定路径时再次触发

所以我虽然专注于我真正需要的项目,但我已经完成了:

rootRef.orderByKey().startAt("-WhatTF123456789")...
Run Code Online (Sandbox Code Playgroud)

但后来我丢失了我的CRUD功能,因为它正在收听新条目,而不是所有条目.

所以我想出了一个解决方案.保留节点,其中包含对FireBase数据库所做的所有更改以及一个节点,其中所有用户已阅读并对本地数据库进行了更改以了解谁需要更新,然后使用addChildEventListener此特定节点.但这似乎是多余的.

我有什么选择来处理这种情况?

java android firebase firebase-realtime-database

5
推荐指数
1
解决办法
418
查看次数

Firebase:将用户的 uid 存储为 Users 集合的文档 ID 总体上是否更好?

我有一个名为 Firestore 的集合users,用于存储我的所有用户信息。注册新用户时,我首先使用 Firebase Auth 注册他们,然后在集合中创建记录users。现在我将其存储UID为字段,这意味着当我想查询用户的信息时,我需要使用子句进行查询WHERE。然而,更快查询的一种替代方法是将 存储UID为集合的文档 ID。这样我就可以使用特定 ID 查询集合,直观上看起来更快。

使用UID作为文档 ID 让我担心一些事情:

  1. 我不确定是否可以假设UIDFirebase Auth 中的唯一性意味着将其用作 Firestore 集合中的文档 ID 时的唯一性。
  2. 我观看了 Todd 的教程视频,视频中说如果使用 Firestore 提供的自动生成的文档 ID,查询速度会更快。鉴于此,当已知提供的文档 ID 查询速度更快时,我不想冒险使用其他东西。

假设您仅基于 进行查询,那么使查询尽可能高效的更好方法是什么UID?或者差异如此微不足道以至于这是一个有争议的问题?

android firebase google-cloud-platform flutter google-cloud-firestore

5
推荐指数
1
解决办法
1429
查看次数