Firestore脱机写入/添加不起作用

时间:2017-11-03 05:47:50

标签: android firebase google-cloud-firestore

我们可以让Firestore将记录下载到本地缓存,并可以读取这些记录。但是,我们无法更新记录,也无法添加新记录。

甚至尝试了一些相同的代码(https://github.com/firebase/quickstart-android),但似乎无法使离线写入/插入工作 - 只能读取。

当我们将此函数调用为脱机时,它会被调用OnFailureListner并抛出异常

 @Override
public void onRating(Rating rating) {
    // In a transaction, add the new rating and update the aggregate totals
    addRating(mRestaurantRef, rating)
            .addOnSuccessListener(this, new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {
                    Log.d(TAG, "Rating added");

                    // Hide keyboard and scroll to top
                    hideKeyboard();
                    mRatingsRecycler.smoothScrollToPosition(0);
                }
            })
            .addOnFailureListener(this, new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.w(TAG, "Add rating failed", e);

                    // Show failure message and hide keyboard
                    hideKeyboard();
                    Snackbar.make(findViewById(android.R.id.content), "Failed to add rating",
                            Snackbar.LENGTH_SHORT).show();
                }
            });
}

1 个答案:

答案 0 :(得分:-1)

您无法简单地离线写入数据,因为Firestore可以获取数据并在您拥有Internet连接时上传数据(这需要在后台执行任务)。 Firestore已经改进了其离线功能,但您始终可以选择创建自己的服务,以便在设备连接时上传它。

Android可让您创建服务。来自developer.android.com

  

服务是在后台运行以执行的组件   长时间运行的操作或执行远程进程的工作。一个   服务不提供用户界面。例如,一项服务   当用户处于不同的状态时,可能会在后台播放音乐   应用程序,或者它可以通过网络获取数据而不会阻塞   用户与活动的互动。另一个组件,如   activity,可以启动服务并让它按顺序运行或绑定到它   与它互动。服务是作为服务的子类实现的。

因此,您可以创建一个等待Internet连接的Service,只需调用FirebaseFirestore对象即可上传您想要的所有数据。

这可能会对您有所帮助,这是有关服务的官方Android信息:https://developer.android.com/guide/components/services.html