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

ibps3vxo  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(414)

下面是我试图创建用户的java代码,然后在firebase中为单个用户插入数据。如何为单个用户插入数据?

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();
            }
        });
    }
}
4xy9mtcn

4xy9mtcn1#

首先创建一个新类,如下所示,以便更轻松地处理事情。

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();
        }
    });
}}

将获得以下格式的数据。

您可以编辑用户类以获得所需的格式。

nfg76nw0

nfg76nw02#

对于用户,最好的选择是使用firebase身份验证。一旦实现了身份验证机制,就可以通过用户的唯一UID来区分用户。这意味着您可以在数据库中为每个用户创建一个单独的位置。尽管@zahidislam的解决方案可行,但将用户名作为密钥存储在数据库中听起来可能不是最好的解决方案,因为firebase realtime数据库中的每个节点都可以被视为一个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"

相关问题