Tag: google cloud firestore

如何在RecyclerView项中的populateViewHolder中设置addSnapshotListener并删除?

我已经使用FirebaseUI-Android库实现了RecyclerView 。 一旦我使用FirebaseRecyclerAdapter我的RecyclerView实时数据就会发生变化 在Collection中,数据文档的字段类型为Boolean,Integer,Reference 。 我想使用Reference来使用addSnapshotListener在populateViewHolder获取数据 。 帮我! 这是我的代码: FirebaseRecyclerAdapter firebaseConvAdapter = new FirebaseRecyclerAdapter( Conv.class, R.layout.users_single_layout, ConvViewHolder.class, conversationQuery ) { @Override protected void populateViewHolder(final ConvViewHolder convViewHolder, final Conv conv, int i) { final String list_user_id = getRef(i).getKey(); final DocumentReference docRef = db.collection(“cities”).document(list_user_id); docRef.addSnapshotListener(new EventListener() { @Override public void onEvent(@Nullable DocumentSnapshot snapshot, @Nullable FirebaseFirestoreException e) { […]

Firestore:允许拒绝权限的事务

我们从Java应用程序引擎实例访问Firestore 。 非事务性请求正在成功,但事务失败并显示错误: firestore: PERMISSION_DENIED: Missing or insufficient permissions 示例交易 final long updatedValue = 15; Firestore db = firebaseManager.getFirestore(); CollectionReference fooCollectionRef = db.collection(SOME_COLLECTION); DocumentReference fooDocumentRef = fooCollectionRef.document(fooId); final ApiFuture future = db.runTransaction(transaction -> { DocumentSnapshot snapshot = transaction.get(fooDocumentRef).get(); transaction.update(fooDocumentRef, SOME_FIELD, updatedValue); return updatedValue; }); return future.get(); 据我所知,我们对开发项目的权限是完全开放的: service cloud.firestore { match /databases/{database}/documents { match /{document=**} […]

非常简单的Firestore事务失败

我正在努力进行超级简单的交易。 它总是失败并显示“Transaction failed all retries”消息,但除了logcat之外没有任何错误消息。 当我调试它时,我发现它正在重试几次。 我真的不知道为什么,因为其他交易没有问题。 我只想将一个文档中的一个文档克隆到另一个集合中。 从“ videos ”到“ favorites ”(我知道这可以在@Alex指出的交易之外完成,但这只是失败的部分,真正的交易更长) private void copy( final DocumentReference SOURCEDOCREF, final CollectionReference TARGETCOLREF) { Transaction.Function transaction = new Transaction.Function() { @Nullable @Override public Void apply(@NonNull Transaction transaction) throws FirebaseFirestoreException { DocumentSnapshot doc = transaction.get(SOURCEDOCREF); if (doc.exists()) { DocumentReference favoriteRef = TARGETCOLREF.document(“FV_” + doc.getId()); Map data = […]

Firebase Firestore同步/无回调检索数据

我在我的Android应用程序中的一个单独的线程中使用Cloud Firestore,所以我不想使用侦听器OnSuccessListener和OnFailureListener在另一个线程中运行。 我可以让我的线程等待结果(并在需要时捕获任何exception)吗? 目前查询的代码是这样的: FirebaseFirestore.getInstance().collection(“someCollection”).get().addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(QuerySnapshot documentSnapshots) { // do something on the UI thread with the retrieved data } }); 我想要的是: FirebaseFirestore.getInstance().collection(“someCollection”).getAndWaitForResult(); //Block the thread and wait for result, no callbacks. //getAndWaitForResult() is not a real function, just something to describe my intention. 我之前曾经使用过Parse Server,在那里它非常简单。

Firestore查询文档startswith一个字符串

是否可以查询firestore集合以获取以特定字符串开头的所有文档? 我已经阅读了文档,但没有找到任何合适的查询。

基于数组项获取集合给出“FAILED_PRECONDITION:查询需要索引”

我试图获取所有带有“maths”标签的问题,但不是成功,而是转移到failedListener。 db.collection(“questionCollection”) .orderBy(“questionID”, Query.Direction.DESCENDING) .whereArrayContains(“tags”,”maths”) .limit(3) .get() .addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(QuerySnapshot queryDocumentSnapshots) { if (queryDocumentSnapshots.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. questionList = queryDocumentSnapshots.toObjects(QuestionBO.class); if (questionList != null && […]

Firestore – 为什么检查DocumentSnapshot是否为空并且调用是否存在?

看一下Firestore文档中的这个代码示例: DocumentReference docRef = db.collection(“cities”).document(“SF”); docRef.get().addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { if (task.isSuccessful()) { DocumentSnapshot document = task.getResult(); if (document != null && document.exists()) { Log.d(TAG, “DocumentSnapshot data: ” + document.getData()); } else { Log.d(TAG, “No such document”); } } else { Log.d(TAG, “get failed with “, task.getException()); } } }); […]

一次性创建带子集合的doc

假设我有一个名为root的集合 我可以在一次调用中创建带有子集合的文档吗? 我的意思是如果我这样做: db.Collection(“root”).document(“doc1”).Collection(“sub”).document(“doc11”).Set(data) 那会一次性创建结构吗? 说实话,我试了一下,doc1有一个斜体标题,我认为只有删除的文档

我想在我的集合的所有文档中保存相同的字符串

我在这个应用程序中使用Firestore创建了一个应用程序我想在一次单击中在一个集合的所有文档中保存相同的字符串 例如:见图像。 我创建了一个集合名称Links 。 在这个集合中,我创建了许多文档。 所以我想保存字符串field: name和value:anyname field: name , value:anyname按一下按钮即可在所有文档中保存。 怎么可能? 请帮忙。

Android Firestore将文档引用数组转换为List

在我的Firestore中,我有一个users集合,其中文档可以有一个bookmarks字段,这是一个引用数组: 这些参考中的每一个都指向teachers集合中的文档: 在我的Android应用程序中,我想创建一个方法getBookmarks ,它返回一个POJO List ,每个POJO代表一个教师。 这是我编码的,但我认为有两个问题: 我无法将List返回给我的callback ,因为我正在单独获取每个文档引用 我认为为集合中的每个项目附加一个回调(用户控制的大小,用户可以拥有他/她想要的多个书签)可能会对性能产生很大影响。 public void getBookmarks(@NonNull OnSuccessListener<List> callback) { checkNotNull(callback); // document reference points to the user document which is calling this method documentReference.get() .addOnSuccessListener((documentSnapshot) -> { ArrayList teacherReferences = (ArrayList) documentSnapshot.get(“bookmarks”); Iterables.forEach(teacherReferences, (documentReference) -> { documentReference.get() .addOnSuccessListener((teacherSnapshot) -> { TeacherPojo teacherPojo = teacherSnapshot.toObject(TeacherPojo.class); // now? }); }); […]