我是Cloud Firestore的新手,目前,我正在開發一個任務管理應用程式的android應用程式現在我正在處理任務組頁面我能夠將任務組名稱添加到firebase資料庫但問題是它顯示給每個登錄的用戶,所以我希望它顯示給添加任務組名稱的用戶,下面我添加了 AddTaskGroup 活動的代碼,請分享僅由用戶添加的任務資料的代碼顯示給他。
添加任務組.java
package com.example.todoappwil;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Html;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.FirebaseFirestore;
public class AddTaskGroup extends AppCompatActivity {
private EditText taskGroupNameEdt;
private Button saveTaskGroupBtn;
private FirebaseUser firebaseUser;
private FirebaseAuth firebaseAuth;
private FirebaseFirestore firebaseFirestore;
private String userID;
private String tskGroupName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile_settings);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// final Drawable upArrow = getResources().getDrawable(R.drawable.arrow);
// upArrow.setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_ATOP);
// getSupportActionBar().setHomeAsUpIndicator(upArrow);
ActionBar actionBar;
actionBar = getSupportActionBar();
ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#3498DB"));
actionBar.setBackgroundDrawable(colorDrawable);
actionBar.setTitle(Html.fromHtml("<font color='#ffffff'>Add Task Group </font>"));
taskGroupNameEdt = findViewById(R.id.addtskGrpInput);
saveTaskGroupBtn = findViewById(R.id.saveTskGroupBtn);
saveTaskGroupBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tskGroupName = taskGroupNameEdt.getText().toString();
if (TextUtils.isEmpty(tskGroupName)) {
taskGroupNameEdt.setError("Enter Task Group");
}
else {
addTaskDatatoFirestore(tskGroupName);
}
}
});
userID = FirebaseAuth.getInstance().getCurrentUser().getUid();
firebaseFirestore = FirebaseFirestore.getInstance();
}
private void addTaskDatatoFirestore(String tskGroupName) {
CollectionReference taskGroups =
firebaseFirestore.collection("TaskGroups");
TaskGroupContainer taskGroupContainer = new TaskGroupContainer(tskGroupName);
taskGroups.add(taskGroupContainer).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Toast.makeText(AddTaskGroup.this, "Task Group Added Successfully",
Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(AddTaskGroup.this, "Fail to add Task Group \n" e,
Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent(AddTaskGroup.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
}
uj5u.com熱心網友回復:
當您使用以下參考時:
CollectionReference taskGroups =
firebaseFirestore.collection("TaskGroups");
這意味著TaskGroups無論用戶是誰,您都在嘗試在集合下添加檔案。如果您需要通過誰添加檔案來區分檔案,那么您必須為每個物件添加一些特定的東西,以便可以區分它。最簡單的解決方案是使用Firebase 身份驗證并添加用戶的 ID,如下所示:
Firestore-root
|
--- TaskGroups (collection)
|
--- taskId (document)
|
--- tskGroupName: "The best group"
|
--- uid: "veryLongId" ??
uid現在要僅獲取與具有例如equal的用戶對應的檔案veryLongId,請使用以下查詢:
Query queryById = taskGroups.whereEqualTo("uid", veryLongId)
但是,您可以在每個用戶物件下嵌套一個任務子集合,如下所示:
Firestore-root
|
--- users (collection)
|
--- uid (document)
|
--- TaskGroups (subcollection)
|
--- tskGroupName: "The best group"
無需將用戶的 UID 存盤為欄位的情況。要獲取用戶擁有的所有任務,只需要以下參考:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
CollectionReference taskGroups = firebaseFirestore
.collection("users")
.document(uid)
.collection("TaskGroups");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/453342.html
上一篇:同時獲取多個檔案
