小编Ale*_*amo的帖子

如何使用Kotlin从Firebase数据库检索数据?

这是我在Firebase上上传的模型:

public class OnlineMatch{

private User user1;
private User user2;

public OnlineMatch(User firstPlayer, User secondPlayer) {
        this.user1 = firstPlayer;
        this.user2 = secondPlayer;
    }

}
Run Code Online (Sandbox Code Playgroud)

然后我以这种方式将数据发送到Firebase(kotlin):

 fun createMatch(match: OnlineMatch) {
        val matchList = database.child("multiplayer").push()
        matchList.setValue(match)
    }
Run Code Online (Sandbox Code Playgroud)

因此,我的数据库结构如下:

在此处输入图片说明 如果扩展节点,则可以完美地看到我的对象:OnlineMatch(User1,User2)

现在,我想查询数据库并获取ArrayList'<'OnlineMatch'>'。 我已经找到了Firebase文档,但没有发现任何有用的信息。我能怎么做?提前致谢。

android kotlin firebase firebase-realtime-database

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

Firebase - 没有在类上找到的序列化属性

我有一个这样的课:

class dataModel {
    String id, name;
    Integer count;

    dataModel() {}
}
Run Code Online (Sandbox Code Playgroud)

我从Firebase添加数据.

mDatabase.addValueEventListener(mListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            dataSet.add(dataSnapshot.getValue(dataModel.class));
            //...
        }
});
Run Code Online (Sandbox Code Playgroud)

当我将应用程序作为调试运行时,没有问题.但在它发布后,应用程序崩溃并出现错误:

com.google.firebase.database.DatabaseException: No properties to serialize found on class com.my.package.dataModel
Run Code Online (Sandbox Code Playgroud)

我有minifyEnabled 是的

java android firebase firebase-realtime-database

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

从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
查看次数

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
查看次数

等待直到检索到Firestore数据以启动活动

我列出了从我的Cloud Firestore数据库获取值的POJO对象列表。这个列表本身就是一个类,每当我创建一个新的列表时都会记住要检索属性。事实是,列表不是在创建活动中填写的,而是之后的时间。我尝试添加循环,任务,等待,但未获得所需的结果。这是我令人满意地检索数据的方式:

private void retrieveData(){
        reference = firestore.collection("attractions");
        reference.addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots,
                                @Nullable FirebaseFirestoreException e) {
                attractionList.clear();
                for (DocumentSnapshot snapshot : queryDocumentSnapshots) {
                    Attraction attraction = snapshot.toObject(Attraction.class);
                    addAttractions(attraction);
                }
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

每次创建新对象时,我都会检索数据:

public AttractionList() {
        firestore.setFirestoreSettings(settings);
        reference = firestore.collection("attractions");
        attractionList = new ArrayList<>();
        retrieveData();
    }
Run Code Online (Sandbox Code Playgroud)

然后,如果我在创建时在我的活动中检查列表大小:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_attraction);
        Toolbar toolbar = findViewById(R.id.tb_attraction);
        setSupportActionBar(toolbar);

        //Creating POJO List and retrieving data
        attractionList = new AttractionList();
        Log.e("List Size: ", ""+attractionList.getAttractionList().size());
        //List …
Run Code Online (Sandbox Code Playgroud)

java android firebase google-cloud-firestore

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

如何在Firestore Firebase中跳过初始数据并仅触发新更新?

我到处搜寻都没有运气。我想查询Firestore以获取类型为admin的所有用户。就像是:

SELECT * FROM users WHERE type=admin
Run Code Online (Sandbox Code Playgroud)

在属性total更改时。如果我正在使用:

users.whereEqualTo("type", "admin").addSnapshotListener(new EventListener<QuerySnapshot>() {
    @Override
    public void onEvent(@Nullable QuerySnapshot snapshots, @Nullable FirebaseFirestoreException e) {
        for (DocumentChange dc : snapshots.getDocumentChanges()) {
            switch (dc.getType()) {
                case ADDED:
                    //Not trigger
                    break;
                case MODIFIED:
                    //Trigger
                    break;
                case REMOVED:
                    //
                    break;
            }
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

当我查询时第一次触发ADDED的情况,而当total更改case MODIFIED时又被触发(这是需要的)。我只需要更改,而不想要所有初始数据,我不需要它。如何获得?

请帮助我,这是我项目的最后一部分。如何跳过case ADDED呢?

java android firebase google-cloud-firestore

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

用于获取未见趋势帖子的 Firebase Firestore 结构 - 社交

这是当前的示例结构

Posts(Collection)
    - post1Id : {
          viewCount : 100,
          likes     : 45,
          points    : 190,
          title     : "Title",
          postType  : image/video
          url       : FileUrl,
          createdOn : Timestamp,
          createdBy : user20Id,
          userName  : name,
          profilePic: url
      }
Users(Collection)
    - user1Id(Document):{
          postsCount : 10,
          userName  : name,
          profilePic : url
      }
        viewed(Collection)
            - post1Id(Document):{
                  viewedTime : ""
              }
                 
    - user2Id(Document)
Run Code Online (Sandbox Code Playgroud)

最终目标是

  • 我需要获取当前用户未查看的帖子,并按分页降序排列。

可能的最佳解决方案是什么(例如改变结构、云功能、客户端多次查询)?

firebase google-cloud-firestore

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

用于文档创建的元数据中是否有 Firestore 时间戳?

我想知道 Cloud Firestore 是否在元数据中为每个文档创建时间戳,如果是,该元数据是否可用?

我知道我可以出于任意原因在文档中创建自己的时间戳,但我只对文档本身的创建时间感兴趣。

提前致谢

timestamp metadata firebase google-cloud-firestore

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