Firestore每读取10万次读取配额和价格。 在基于关系的数据库中,我有非常简单的任务,但是对于Firestore而言,这看起来像是开销: 我有Firestore集合的“文章”,每篇文章都有字段“views_by_uids”作为Firebase用户UID的数组 我已经阅读了10万篇文章(简称) 我想为我的UID获取UNREaded文章 我是否真的需要用分页来查询这个100K的参考文章,例如每页50个项目,以便过滤LOCALLY(通过我的弱移动网络发送太多的数据),最后得到UNREaded文章来显示? 编辑:澄清这里是我如何用Kotlin在Android中创建“文章”: data class Article ( val title: String, val text: String, val ownerUid: String, @ServerTimestamp val creationDate: Date? = null) //写满文章到firestore val article = Article (title = “test title” text = “test text”, ownerUid = FirebaseAuth.getInstance().uid!!) val articleRef = FirebaseFirestore.getInstance() .collection(Article.COLLECTION_NAME) .document() .set(article) .addOnFailureListener { …just show error } […]
我将其中一个应用程序转换为新的Firestore。 我正在做一些事情,像点击一个按钮保存文档,然后在onSuccess监听器,去一个不同的活动。 我还使用Firestore保存操作返回任务的事实,使用Tasks.whenAll将任务组合在一起: val allTasks = Tasks.whenAll( createSupporter(supporter),, setStreetLookup(makeStreetKey(supporter.street_name)), updateCircleChartForUser(statusChange, createMode = true), updateStatusCountForUser(statusChange)) allTasks.addOnSuccessListener(this@SignUpActivity, successListener) allTasks.addOnFailureListener(this@SignUpActivity, onFailureListener) 最后,我从成功的保存中获取文档ID,并将其存储在首选项或本地数据库中供以后使用(在onSuccessListener ) 这一切都很好。 直到网络连接中断 。 然后,一切都崩溃了,因为任务永远不会完成,onSuccess / onFailure / onComplete监听器永远不会被调用。 所以应用程序只是挂起。 我正在通过在每次保存之前检查网络可用性来解决此问题,然后通过创建没有任何侦听器的任务来解决此问题。 我也使用UUID生成器在本地生成文档ID。 顺便说一句,这不是应用程序与旧的firebase的工作方式。 在这种情况下,离线时,一切都运行良好,每当应用程序上线时,我都会看到文件同步。 我的Firestore的解决方法似乎是一个可怕的黑客攻击。 有没有人想出更好的解决方案? 有关插入/删除文档回调的相关Firestore数据库在没有连接时不会被调用 addOnCompleteListener不会与云端firestore脱机调用
谈论火灾持久性数据,让我们假设用户在第一次启动应用程序时没有任何连接。 我添加一些数据到Firestore数据库(如userID ..),我可以用get()方法取回它。 现在用户关闭应用程序。 下一次,他将打开应用程序(仍然没有连接),他将能够检索以前存储的数据,就像它被存储在sharedprefs的方式? 我不能清楚地弄清楚如何find一个合适的方法来建立一个永久数据的初始阶段。 我有几个片段。 每次启动其中一个时,我使用“onResume”方法从数据中填充我的组件(先前存储在sharedpref中)。 当我设置Firestore getData时,需要时间来检索。 因此,如果用户从当前片段更改为另一个,那么当连接为ON时,在数据库结果完成时,组件有空或无法访问的错误。 实施这种“onResume”数据再填充的最佳方式是什么? 更新: 以下是一些代码: MainAvtivity .kt FirebaseFirestore.getInstance().firestoreSettings.isPersistenceEnabled sightingsDatabase = FirebaseFirestore.getInstance() docname=FireStoreSetup().setupFB(sightingsDatabase!!,this) 一个kotlin对象类来填充我的文档: data class Sighting(var userID: String, var sig_wit_situation_type: Int, var sig_env_background_type: Int, var sig_ground_type: Int, var sig_YYYY: String, var sig_MM: String, var sig_DD: String, var sig_time_start: String, var sig_date_time: String, var sig_duration_hms: String, var […]
早上好 所以,我可以从我的Firebase文档和集合中加载信息,在某种程度上… 当我的collections有1个文件,一切都顺利。 当它有一个以上的文件,那么,应用程序中断。 所以,我有这个: db.collection(“KitListCategorie”).get().addOnSuccessListener { snapshot -> for (document1 in snapshot.documents) { val data1 = document1.data val weights = data1[“categoryName”] as String val misc = data1[“categoryName”] as String categorySpinnerArray.add(weights) categorySpinnerArray.add(misc) } categorySpinnerArrayAdapter.notifyDataSetChanged() } 对于此Firestore设置: https : //imgur.com/a/pmBcE 然后我得到这个错误: kotlin.TypeCastException: null cannot be cast to non-null type kotlin.String 我究竟做错了什么? 谢谢
我有一个问题从Firestore中获取数据,在JavaCode中我们可以这样做: 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) { Log.d(TAG, “DocumentSnapshot data: ” + task.getResult().getData()); } else { Log.d(TAG, “No such document”); } } else { Log.d(TAG, “get failed with “, task.getException()); } } }); 但在Kotlin,当我尝试覆盖onComplete函数,它是不可用的。 那么,我怎样才能得到“任务”呢?
我正在使用FirestoreRecyclerAdapter 。 我能够得到每个文件的模型和属性。 但是我想获取文档ID。 我尝试使用model. 自动建议,但没有文件编号或名称 我有以下DealsHolder类。 这是在Kotlin。 然而其余的所有类都在java中。 package com.guidoapps.firestorerecycleradaptersample import com.google.firebase.firestore.IgnoreExtraProperties @IgnoreExtraProperties data class DealsResponse(var title:String? = null, var price:String? = null, var dealPrice:String? = null, var image:String? = null, var description: String? = null) 下面我在onCreate()中初始化的函数 private void getDealsList(){ Query query = db.collection(“deals”).orderBy(“dateTime”, Query.Direction.DESCENDING); FirestoreRecyclerOptions response = new FirestoreRecyclerOptions.Builder() .setQuery(query, DealsResponse.class) .build(); adapter […]
我有Firestore数据库。 收集简单: “tasks / {taskId}”:{ “ownerUid”:“任务拥有者Firebase Uid”, “whoDidUids”:[“user_1_FirebaseUid”,“user_2_FirebaseUid”] } “users / {userUid}”:{“fcm_token”:“firestore云消息传递令牌”} 只需要编写简单的云function,将触发: exports.taskDoneNotification = functions.firestore .document(‘tasks/{taskId}’) .onUpdate((event) => { //when another user did task it means //userUid will be added to task.whoDidUids array //I want to get task owner fcmToken and send him // simple notification like “your task done by someone!” }); 我是js语法的新手,在Kotlin上为Android写作。 […]
我正在尝试创建一个文件列表。 比方说,我有这样的结构: cards cardId1 authorizedUser = someuserid1 cardId1b authorizedUser = someuserid1 cardId2 authorizedUser = someuserid2 我想列出“someuserid1”的前两个文件和“someuserid2”的最后一个文件。 什么是最好的办法呢? 我尝试使用安全规则,但没有奏效: service cloud.firestore { match /databases/{database}/documents { match /cards/{cardid} { allow read, write: if resource.data.authorizedUser == request.auth.uid; } } } 而这个我的Kotlin代码: val query = FirebaseFirestore.getInstance() .collection(“cards”) .limit(50) val options = FirestoreRecyclerOptions.Builder() .setQuery(query,Card::class.java) .build() adapter = CardFireAdapter(options) 任何想法,我在这里失踪?
我有这个数据类 data class TripEntity(@Exclude val id: String = “”, val name: String = “”, val totalDistance: Long = 0, val startDate: Date?, val endDate: Date?) 然后我有这些方法来坚持数据 private fun writeNewTripEntity(tripEntity: TripEntity, emitter: ObservableEmitter) { val tripCollection = FirebaseFirestore.getInstance().collection(“users/test/trips”); tripCollection.add(tripEntity).addOnSuccessListener({ documentReference -> onWriteEntitySuccess(documentReference, emitter, tripEntity) }).addOnFailureListener({ e -> onWriteEntityError(e, emitter) }) } private fun onWriteEntitySuccess(documentReference: DocumentReference, emitter: […]
我正在寻找一种方式来创建一个firestore事务,我从查询中find一个文档,然后在一个事务中修改这个文档。 这些线(科特林)的东西: firestore.runTransaction { transaction -> val snapshot = transaction.get(db.collection(“document”) .whereEqualTo(“someField”, null) .orderBy(“creationDate”, ASCENDING) .limit(1L)) val myObject = snapshot.toObject(MyObject::class.java) myObject.someFiled = “123” transaction.set(snapshot.reference, myObject) } 这里的问题是.limit(1)方法返回的查询不是一个DocumentReference,它是事务接受的唯一types。 所以我的问题是,如何在java / kotlin中实现这样的事务呢? 我在这个博客文章中使用admin sdk看到类似的东西: return trs.get(db.collection(‘rooms’) .where(‘full’, ‘==’, false) .where(‘size’, ‘==’, size) .limit(1));