Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.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
如何获取向其中添加集合的文档ID-android studio firestore_Android_Google Cloud Firestore_Collections_Document - Fatal编程技术网

如何获取向其中添加集合的文档ID-android studio firestore

如何获取向其中添加集合的文档ID-android studio firestore,android,google-cloud-firestore,collections,document,Android,Google Cloud Firestore,Collections,Document,我正在开发菜谱应用程序,这样用户就可以注册到该应用程序并保存自己的菜谱。 我已经创建了类Recipe,现在我想使用特定用户的UID将Recipe的集合添加到特定用户,但我不知道如何检索插入集合的路径ID 求求你,任何帮助。。。我写的代码是: public class AddRecipe extends AppCompatActivity { private FirebaseFirestore db; private FirebaseAuth mAuth; privat

我正在开发菜谱应用程序,这样用户就可以注册到该应用程序并保存自己的菜谱。 我已经创建了类Recipe,现在我想使用特定用户的UID将Recipe的集合添加到特定用户,但我不知道如何检索插入集合的路径ID

求求你,任何帮助。。。我写的代码是:

public class AddRecipe extends AppCompatActivity {

    private FirebaseFirestore db;
    private FirebaseAuth mAuth;
    private CollectionReference usersRef;
    private FirebaseUser user;
    DocumentReference docRef;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        db = FirebaseFirestore.getInstance();
        mAuth = FirebaseAuth.getInstance();
        usersRef = db.collection("Users");


        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_recipe);
    }


    public void addRecipeFunc(View view) {

        user = mAuth.getCurrentUser();
        String uid = user.getUid();
        HashMap<String, String> ingredients = new HashMap<>();
        ingredients.put("Banana", "3");
        Recipe recipe = new Recipe("bla", "bla", ingredients, "bla", "bla", "bla");

        usersRef = db.collection("Users");
        //usersRef.document(uid).collection("Recipes").add(recipe);
        db.collection("Users").document(uid).collection("Recipes").document("Recipe").set(recipe);
    }
}
公共类AddRecipe扩展AppCompative活动{
私有FirebaseFirestore数据库;
私人消防队;
私人收藏参考用户sref;
私有FirebaseUser用户;
文件参考文件;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
db=FirebaseFirestore.getInstance();
mAuth=FirebaseAuth.getInstance();
usersRef=db.collection(“用户”);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u add\u recipe);
}
public void addRecipeFunc(视图){
user=mAuth.getCurrentUser();
字符串uid=user.getUid();
HashMap Components=新的HashMap();
配料。放入(“香蕉”、“3”);
配方=新配方(“bla”、“bla”、配料、“bla”、“bla”、“bla”);
usersRef=db.collection(“用户”);
//usersRef.document(uid).collection(“配方”).add(配方);
db.集合(“用户”).文档(uid).集合(“配方”).文档(“配方”).集合(配方);
}
}
该代码将使用名为Recipe的文档将Recipe添加到Recipe集合中。这意味着每当用户想要添加新配方时,它都会覆盖配方文档。若您并没有给文档命名,Firestore将创建文档并为其本身提供一个id

db.collection("Users").document(uid).collection("Recipes").document().set(recipe);
您可以通过使用DocumentReference调用getId()方法来获取DocumentId

DocumentReference ref =  db.collection("Users").document(uid).collection("Recipes").document();
//Id of the document
String docId = ref.getId();
ref.set(recipe);
或者,您可以将另一个名为Id的字段添加到配方类中(不要忘记将该字段添加到构造函数中),然后您可以设置自己的Id。这也会将您的Id保存到文档中

String id = String.valueOf(System.currentTimeMillis());
Recipe recipe = new Recipe(id, "bla", "bla", ingredients, "bla", "bla", "bla");
DocumentReference ref =  db.collection("Users").document(uid).collection("Recipes").document(id).set(recipe);
编辑: 如果要在用户文档中添加所有配方对象而不创建子集合,请创建映射并将所有配方存储在该文档中

Map<String, Recipe> recipes = new HashMap<>;
recipes.put("recipe1", new Recipe("bla", "bla", ingredients, "bla", "bla", "bla"));
recipes.put("recipe2", new Recipe("bla2", "bla2", ingredients2, "bla2", "bla2", "bla2"));

首先,感谢您的评论!我的意思是我想将集合“配方”添加到用户字段内的特定文档中-这意味着我想在运行时知道应该将配方插入到哪个用户文档路径。。。希望它更清晰。集合(“用户”)。文档(uid)是当前用户的文档。在该文档之后,如果添加.collection(“Recipes”),“Recipes”集合将添加到当前用户的文档下。因此,它将显示用户->当前用户ID->配方。之后,其他配方文档将添加到配方集合下。用户->当前用户ID->配方->recipeID。因此,每个用户都将拥有自己的配方集合和配方文档。或者,您可以创建一个包含用户所有配方对象的映射,并将其作为字段存储在当前用户的文档中。
Map<String, Recipe> recipes = new HashMap<>;
recipes.put("recipe1", new Recipe("bla", "bla", ingredients, "bla", "bla", "bla"));
recipes.put("recipe2", new Recipe("bla2", "bla2", ingredients2, "bla2", "bla2", "bla2"));
DocumentReference ref =  db.collection("Users").document(uid);
db.runTransaction((Transaction.Function<String>) transaction -> {
    transaction.update(ref, field, recipes);
    return null;
});