【问题标题】:How to create the User Name and then Insert/relate data with User using Firebase如何创建用户名,然后使用 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();
            }
        });
    }
}

【问题讨论】:

  • 你能解释更多你想要达到的目标吗

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


【解决方案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"
    

    【讨论】:

    • 嘿哈米德!我可以帮助您了解其他信息吗?如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记(✔️)来接受它。应将颜色更改为绿色。我真的很感激。谢谢!
    猜你喜欢
    • 2017-03-09
    • 2013-07-11
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多