Android Firestore:未能获得Firestore客户端的独占锁';s离线持久性

Android Firestore:未能获得Firestore客户端的独占锁';s离线持久性,android,android-studio,service,google-cloud-firestore,Android,Android Studio,Service,Google Cloud Firestore,我正在开发一个Android应用程序,每10秒更新一次用户的位置。为此,我在服务中运行timerTask,并将LatLng值写入Firestore数据库 下面是我的timerTask类 class UploadDataTimerTask extends TimerTask { @Override public void run() { // run on another thread mHandler.post(new Runnable() {

我正在开发一个Android应用程序,每10秒更新一次用户的位置。为此,我在服务中运行timerTask,并将LatLng值写入Firestore数据库

下面是我的timerTask类

class UploadDataTimerTask extends TimerTask {

    @Override
    public void run() {
        // run on another thread
        mHandler.post(new Runnable() {

            @Override
            public void run() {

                Log.d("TAG", String.valueOf(mLatLong));

                mFireStore.collection(Constants.LOCATION_REFERENCE).document(mUser.getUid()).set(mLatLong).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {

                        if (task.isSuccessful()) {
                            Log.d("TAG", "Upload successful.");
                        }
                    }
                });
            }
        });
    }
}

我搜索了很多,但还没有找到问题所在。如何修复此问题?

Firestore
无法从与第一次写入操作不同的线程加入,因为是创建对本地数据库的引用时,请记住
Firestore
异步运行其所有操作(它们不会阻止调用线程)但是它们的回调是在主循环器上调用的,这意味着,查看您的代码,您的问题就解决了:删除对处理程序的post,并建议为回调传递一个执行器,如下所示:

mFireStore.collection(Constants.LOCATION_REFERENCE).document(mUser.getUid()).set(mLatLong).addOnCompleteListener(Executors.newSingleThreadExecutor(),new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {

                        if (task.isSuccessful()) {
                            Log.d("TAG", "Upload successful.");
                        }
                    }
                });
            }
        });
    }
mFireStore.collection(Constants.LOCATION\u REFERENCE).document(mUser.getUid()).set(mLatLong).addOnCompleteListener(Executors.newSingleThreadExecutor(),new OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Log.d(“标记”,“上载成功”);
}
}
});
}
});
}

您是否尝试清除设备上应用程序管理器中的数据,然后再次运行应用程序?是的,我尝试过。我尝试清除应用程序数据,甚至重新安装应用程序。但是,这似乎没有帮助。谢谢您的回复。:)让我试试你的解决方案,然后再回来。
mFireStore.collection(Constants.LOCATION_REFERENCE).document(mUser.getUid()).set(mLatLong).addOnCompleteListener(Executors.newSingleThreadExecutor(),new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {

                        if (task.isSuccessful()) {
                            Log.d("TAG", "Upload successful.");
                        }
                    }
                });
            }
        });
    }