【问题标题】:Firebase Android - Saving data objects to user IDFirebase Android - 将数据对象保存到用户 ID
【发布时间】:2018-01-22 18:55:49
【问题描述】:

我正在尝试以用户 ID 将用户数据保存在我的应用中。

现在,我可以保存基于“锻炼”的信息和另一个基于“锻炼详细信息”的信息。详细信息保存在“锻炼”ID 下,因此已连接。

我正在尝试将数据保存在使用 Google 登录创建的唯一用户 ID 下。

因此,当用户保存详细信息时,他/她现在只能看到自己的详细信息。我确实有正常的 Firebase 数据库规则设置。

private  void addWorkout(){
        String name = editTextName.getText().toString().trim();
        String category = spinnerCategory.getSelectedItem().toString();

        //if name not empty we save it to firebase db
        if(!TextUtils.isEmpty(name)){

            //make it so it saves under the user ID
            FirebaseUser user = firebaseAuth.getCurrentUser();

            //create a unique id for workout to save in firebase

            String id =databaseWorkouts.push().getKey();

            Workout workout = new Workout(id, name, category );

            //set value method to save in firebase db
            databaseWorkouts.child(id).setValue(workout);

            Toast.makeText(this, "Workout added", Toast.LENGTH_LONG).show();
            editTextName.setText("");

【问题讨论】:

    标签: android firebase firebase-realtime-database firebase-authentication


    【解决方案1】:

    要解决这个问题,请使用 push() 方法提供的随机生成的密钥,而不是使用 uid 对象中的 uid,如下所示:

    String id = user.getUid();
    Workout workout = new Workout(id, name, category);
    databaseWorkouts.child(id).setValue(workout);
    Toast.makeText(this, "Workout added", Toast.LENGTH_LONG).show();
    editTextName.setText("");
    

    【讨论】:

    • 谢谢,这对我有用。因为它使用用户ID作为主ID,所以我只能保存一件事。这意味着如果我尝试保存另一个“锻炼”,它只会重写上一个条目。为每个用户只留下一个“锻炼”
    【解决方案2】:

    您首先需要从数据库中获取用户 ID 和 StorageReference

    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    
    if (user == null) {
        // No session user
        return;
    }
    
    // In this example is QMvzmlCksCPgFSpuVNxwBuVBvaA2
    
    String userId = user.getUid();
    
    //Example you need save a Store in 
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    
    DatabaseReference stores = database.getReference("stores");
    
    stores.child(userId).push().setValue(store);
    

    其中 store 是一个你需要保存的类。

    Store store= new Store();
    
    public class Store {
    
    public String url;
    public String username;
    public String password;
    public String image;
    public String name;
    
    public Store() {
    }
    
    public Store(String url, String username, String password, String image, String name) {
        this.url = url;
        this.username = username;
        this.password = password;
        this.image = image;
        this.name = name;
    }
    

    }

    您的 Firebase 数据库中终于有了 Example saved store data in Firebase Database

    注意:如果你不想要列表数据,你可以省略 .push()

    【讨论】:

      猜你喜欢
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      相关资源
      最近更新 更多