gpt4 book ai didi

java - 如何在用户验证 key 下正确地将数据存储在实时数据库中?

转载 作者:行者123 更新时间:2023-11-29 22:45:34 25 4
gpt4 key购买 nike

我已经使用共享首选项在经过验证的 key 下将一些数据存储在实时数据库中。我使用 SharedPreferences 因为我使用多个页面来获取用户数据。在存储数据时,它获得了一个额外的节点,即“所有”节点,我没有在我的代码中的任何地方添加这个节点。节点的流程应该像 (1) User->authkey->age 而不是像 (2) User->authkey->all->age。由于这个额外的节点,我无法检索数据 firebase。我应该怎么做才能使它像 (1)。

下面是数据库的 fragment 。

These are the number of users

This is the data under all node

下面是我将数据存储到我的数据库中的代码

public class LoginDetails extends AppCompatActivity {
EditText etemail_id,etpassword;
TextView tvlogin_details;
Button btregister,btback;
FirebaseAuth mAuth;
FirebaseDatabase database;
DatabaseReference reference;
Users users;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_details);
etemail_id = (EditText) findViewById(R.id.etEmailid);
etpassword = (EditText) findViewById(R.id.etPassword);

tvlogin_details = (TextView) findViewById(R.id.tvLoginDetails);
btback = (Button) findViewById(R.id.btBack);
mAuth = FirebaseAuth.getInstance();
btregister = (Button) findViewById(R.id.btRegister);
database=FirebaseDatabase.getInstance();
reference=database.getReference();
users=new Users();
btregister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final String email = etemail_id.getText().toString().trim();
final String password = etpassword.getText().toString().trim();

if (TextUtils.isEmpty(email)) {
etemail_id.setError("Provide your Email first!");
etemail_id.requestFocus();
}
else if (TextUtils.isEmpty(password)) {
etpassword.setError("Enter Password!");
etpassword.requestFocus();
}
else if (!(email.isEmpty() && password.isEmpty())) {
mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(LoginDetails.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {

reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
SharedPreferences sp = getSharedPreferences("Mypref", Context.MODE_PRIVATE);
reference.child("User").child(Objects.requireNonNull(mAuth.getUid())).setValue(sp);
Toast.makeText(getApplicationContext(), "data entered", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

Toast.makeText(getApplicationContext(), "database error", Toast.LENGTH_SHORT).show();
}
});
Toast.makeText(LoginDetails.this, "Successfully registered", LENGTH_LONG).show();
Intent it = new Intent(getApplicationContext(), Login.class);
startActivity(it);
}

else {
Toast.makeText(LoginDetails.this, "Registration Error", LENGTH_LONG).show();
}
}
});
}
else {
Toast.makeText(LoginDetails.this, "Error", Toast.LENGTH_SHORT).show();
}
}
});

btback.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent it1 = new Intent(getApplicationContext(), Preferences.class);
startActivity(it1);
}
});
}

}

`

最佳答案

您在数据库中获得不需要的额外级别(all),因为当您使用以下方式写入数据时:

reference.child("User").child(Objects.requireNonNull(mAuth.getUid())).setValue(sp);

您正在向 setValue() 方法传递一个 SharedPreferences 对象:

SharedPreferences sp = getSharedPreferences("Mypref", Context.MODE_PRIVATE);

并且不是存储在该对象中的数据。在您的 sp 对象中,数据存储为包含键值对的 Map。该对象中的第一个键是 all,值是您的实际数据。这就是你拥有那种结构的原因。要解决这个问题,只需从 sp 对象中取出数据,将其保存到 Users 对象中并将其写入数据库。通过这种方式,您将拥有一个没有该额外节点的数据库树。

关于java - 如何在用户验证 key 下正确地将数据存储在实时数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58538395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com