如何创建用户名,然后使用 Firebase 与用户插入/关联数据

Posted

技术标签:

【中文标题】如何创建用户名,然后使用 Firebase 与用户插入/关联数据【英文标题】:How to create the User Name and then Insert/relate data with User using Firebase 【发布时间】:2021-09-17 06:45:35 【问题描述】:

这是我尝试创建用户然后在 Firebase 中为单个用户插入数据的 Java 代码。 如何为单个用户插入数据?

public class MainActivity extends AppCompatActivity 

    Button submit;
    EditText text1;
    FirebaseDatabase mydata;
    DatabaseReference mref;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        submit = findViewById(R.id.submit);
        text1 = findViewById(R.id.text1);

        mydata = FirebaseDatabase.getInstance();
        mref = mydata.getReference();

        submit.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                String data = text1.getText().toString();
                mref.setValue(data);
                Toast.makeText(MainActivity.this, "data Inserted", Toast.LENGTH_SHORT).show();
            
        );
    

【问题讨论】:

你能解释更多你想要达到的目标吗 【参考方案1】:

首先创建一个如下的新类以便于处理。

public class User 
public String phone, address;

public User() 



public User(String phone, String address) 
    this.phone = phone;
    this.address = address;

然后编辑您发布的代码。

public class MainActivity extends AppCompatActivity 

Button submit;
//EditText text1;
// FirebaseDatabase mydata;
//  DatabaseReference mref;
private EditText nameEdit, phoneNumberEdit, addressEdit;
public String name, phoneNumber, address;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    submit = findViewById(R.id.submit);
    // text1 = findViewById(R.id.text1);
    nameEdit = findViewById(R.id.nameEdit);
    phoneNumberEdit = findViewById(R.id.phonenumberEdit);
    addressEdit = findViewById(R.id.addressEdit);

    // mydata = FirebaseDatabase.getInstance();
    // mref = mydata.getReference();

    submit.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            //  String data = text1.getText().toString();
            //  mref.setValue(data);
            name = nameEdit.getText().toString().trim();
            phoneNumber = phoneNumberEdit.getText().toString();
            address = addressEdit.getText().toString().trim();
            User user = new User(
                    phoneNumber,
                    address
            );
            FirebaseDatabase.getInstance().getReference(name)
                    .setValue(user);
            //  mref.setValue(user);
            Toast.makeText(MainActivity.this, "data Inserted", Toast.LENGTH_SHORT).show();
        
    );

会得到如下格式的数据。

您可以编辑用户类以获得您想要的格式。

【讨论】:

【参考方案2】:

对于用户来说,最好的选择是使用Firebase Authentication。实现身份验证机制后,您将能够通过用户的唯一 UID 来区分用户。这意味着您可以在数据库中为每个用户创建一个单独的位置。虽然@ZahidIslam 的解决方案可行,但将用户名作为键存储在数据库中,这听起来可能不是最好的解决方案,因为 Firebase 实时数据库中的每个节点都可以被视为一个 Map,这是一种不允许重复的数据结构.因此,如果另一个具有相同“zahid”名称的用户加入您的应用,数据将被覆盖,我认为这不是您想要的。

因此考虑为您的用户创建一个 POJO 类,其最小声明如下所示:

class User 
    String uid, name;

要保存用户数据,只需在 Java 中使用以下代码行:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users");
usersRef.child(uid).setValue(new User(uid, "Hamid Idrees")).addOnCompleteListener(/* ... /*);

Firebase 控制台中的结果将是:

Firebase-root
   |
   --- users
        |
        --- $uid
             |
             --- uid: "uidThatComesFromFirebaseUserObject"
             |
             --- name: "Hamid Idrees"

【讨论】:

嘿哈米德!我可以帮助您了解其他信息吗?如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记(✔️)来接受它。应将颜色更改为绿色。我真的很感激。谢谢!

以上是关于如何创建用户名,然后使用 Firebase 与用户插入/关联数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 AngularJS 和 Firebase 与用户传输项目

如何首先在Firebase中发送电子邮件验证,然后创建帐户?

如何使用 Firebase 实时数据库创建特定用户所有已保存帖子的列表?

如何在不关闭当前 Firebase 会话的情况下创建用户身份验证 [重复]

电话身份验证创建新帐户并断开 Firebase 上的链接

如何合并两个 Firebase 帐户(一个使用电子邮件创建,另一个使用电话号码创建)?