仅通过Firestore存储当前登录用户的数据



当我使用用户帐户1登录并上传数据时,让我们说"Hello"并获取它,我可以看到单词"Hello"(这是我想要的(。但是当我注销并使用用户帐户2登录时,每当我单击获取时,它都会显示"您好"。但它不应该显示这一点,因为这是由用户帐户 1 输入的。因此,它应该只显示登录用户输入的数据。

如何更改我的代码以仅允许当前登录用户存储和检索数据?

下面是代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FirebaseApp.initializeApp(this);
setContentView(R.layout.activity_ichild);
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
DocumentReference uidRef = rootRef.collection("RootCollection").document(uid);
POJO pojo = new POJO();
uidRef.set(pojo);

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();
}
});
}
});

因为每次将数据加载到同一文档时

firestore.collection("RootCollection").document("MyDoc")

相反,您可以使用引用路径中ID的文档,因此请使用此

uidRef.set(pojo).addOnSuccessListener(new OnSuccessListener<Void>() {

而不是

firestore.collection("RootCollection").document("MyDoc")
.set(pojo).addOnSuccessListener(new OnSuccessListener<Void>() {

并删除它,只需设置空对象

POJO pojo = new POJO();
uidRef.set(pojo);

最新更新