Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Firestore仅存储当前登录用户的数据_Java_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

Java 如何使用Firestore仅存储当前登录用户的数据

Java 如何使用Firestore仅存储当前登录用户的数据,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,下面是允许用户将数据存储到Firestore的代码。问题是,所有登录到应用程序的用户都可以查看上传的数据。 我如何才能只允许当前登录的用户存储其帐户的数据 对于Firebase数据库,我使用以下代码(可以使用,但不适用于Firestore) FirebaseUser=FirebaseAuth.getInstance().getCurrentUser(); 字符串userId=user.getUid(); mDatabaseRef=FirebaseDatabase.getInstance().ge

下面是允许用户将数据存储到Firestore的代码。问题是,所有登录到应用程序的用户都可以查看上传的数据。 我如何才能只允许当前登录的用户存储其帐户的数据

对于Firebase数据库,我使用以下代码(可以使用,但不适用于Firestore)

FirebaseUser=FirebaseAuth.getInstance().getCurrentUser(); 字符串userId=user.getUid(); mDatabaseRef=FirebaseDatabase.getInstance().getReference(FB_DATABASE_PATH).child(userId)

以上代码行仅允许为登录用户存储和检索数据。因此,这些数据只对他们来说是唯一的

我如何为Firestore复制这一点

 fetch=findViewById(R.id.fetchDocument);

    firestore = FirebaseFirestore.getInstance();

    upload =findViewById(R.id.uploadText);

    upload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            POJO pojo = new POJO();
            pojo.setValue("Hello World");

            //below code creates collection, creates a inner doc. and uploads the value (pojo)

            firestore.collection("RootCollection").document("MyDoc")
                    .set(pojo).addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {


                    //gets called if upload is successful
                    Toast.makeText(ichild.this,"Upload is successful", Toast.LENGTH_SHORT).show();

                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(ichild.this,"Upload is not successful" + e.getMessage(), Toast.LENGTH_SHORT).show();
                }
            });

        }
    });

    fetch.setOnClickListener(new View.OnClickListener() {
fetch=findviewbyd(R.id.fetchDocument);
firestore=FirebaseFirestore.getInstance();
upload=findviewbyd(R.id.uploadText);
upload.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
POJO POJO=新POJO();
setValue(“你好世界”);
//下面的代码创建集合,创建内部文档,并上载值(pojo)
firestore.collection(“RootCollection”).document(“MyDoc”)
.set(pojo).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公开作废(作废避免){
//如果上载成功,则调用
Toast.makeText(ichild.this,“上载成功”,Toast.LENGTH_SHORT.show();
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Toast.makeText(ichild.this,“上载不成功”+e.getMessage(),Toast.LENGTH_SHORT).show();
}
});
}
});
fetch.setOnClickListener(新视图.OnClickListener(){
如何使用Firestore仅存储当前登录用户的数据

如果将
uid
传递给
document()
方法,则可以实现同样的效果。因此,Firebase实时数据库中使用了以下代码行:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String userId = user.getUid();
mDatabaseRef = FirebaseDatabase.getInstance().getReference(FB_DATABASE_PATH).child(userId);
在Firestore中与以下各项等效:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
DocumentReference uidRef = rootRef.collection("users").document(uid);
POJO pojo = new POJO();
uidRef.set(pojo);

您需要添加firestore规则,以防止用户向其他用户添加数据。只需检查firestore中的auth userid,并将其与文档上的userid进行比较。

我应该将其放在代码中的什么位置?我尝试过,但它以红色显示rootRef?请查看我的更新答案。我错过了应该初始化的代码行
rootRef
对象。它现在可以工作了吗?很抱歉,没有看到更新的对象。它可以工作,因为代码没有显示为红色。但是,仍然没有保存当前登录用户的数据。当我使用另一个用户帐户登录时,我可以看到其他用户的数据。为什么你说“仍然没有保存当前登录用户的数据?”?但是是为哪个用户保存?我肯定是为登录的用户保存。不能为其他用户保存。你也在说“我可以看到其他用户的数据”,你在哪里可以看到这个?我的意思是,当我使用用户帐户1登录并上传数据时,让我们说“你好”并获取数据,我可以看到“你好”这个词(这是我想要的)。但当我使用用户account2注销和登录时,每当我单击“获取”时,它都会显示“你好”。但它不应该显示“你好”,因为这是由用户account1输入的。因此,它应该只显示登录用户输入的数据。