首页 > 解决方案 > 如何在使用java编写Android之前从firebase数据库中读取已经存在的数据

问题描述

我正在开发一个安卓应用程序。我将 Firebase 用于后端服务。我想根据他们的电话号码对人进行身份验证。一个电话号码不应该有多个用户帐户。

数据库结构如下图所示。

在此处输入图像描述

如果另一个用户输入相同的电话号码,我们不应该允许登录。所以我写了如下代码

单击按钮后,我尝试读取所有用户信息并将其保存在列表中。然后使用当前电话号码检查数据库中的现有电话号码。如果数据已经存在,则不会存储数据。否则将存储数据

public class ProfileActivity extends AppCompatActivity {
   EditText E1, E2, E3;
   Button B1,B2;
    String phone;
String exist="not_exist";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profile);
    Intent intent = getIntent();
    phone = intent.getStringExtra("mobile");
    onclick();
}
void onclick() {
    E1 = (EditText) findViewById(R.id.L_Name);
    E2 = (EditText) findViewById(R.id.L_Password);
    E3 = (EditText) findViewById(R.id.L_Confirm_Password);
    B1 = (Button) findViewById(R.id.login);
    B1.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View V) {
                    DatabaseReference mreadDatabase;
                    mreadDatabase = FirebaseDatabase.getInstance().getReference().child("users");
                    mreadDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            List<User> list = new ArrayList<>();
                            List<String> username = new ArrayList<>();
                            List<String> phonearray = new ArrayList<>();
                            List<String> pswr = new ArrayList<>();
                            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                                User user = ds.getValue(User.class);
                                list.add(user);
                            }
                            for (int i = 0; i < list.size(); i++) {
                                username.add(i,list.get(i).getname());
                                phonearray.add(i,list.get(i).getphone());
                                pswr.add(i,list.get(i).getpswr());
                                Log.e("in copy section","in copy section");
                                Log.e("username.get(i)", username.get(i));
                                Log.e("phonearray.get(i)", phonearray.get(i));
                                Log.e("pswr.get(i)", pswr.get(i));
                            }
                            for (int i = 0; i < list.size(); i++) {
                                Log.e("in check section","in check section");
                                Log.e("phone",phone);
                                Log.e("username.get(i)", username.get(i));
                                if (phone == phonearray.get(i)) {
                                    exist = "exist";
                                    Log.e("exist", exist);
                                }
                            }
                        }
                        @Override
                        public void onCancelled(DatabaseError databaseError) {}
                    });
                    if (E2.getText().toString().equals(E3.getText().toString()) ) {
                        Log.e("in store section","in store section");
                        Log.e("exist",exist);
                        if (exist == "not_exist") {
                            DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("users");
                            String userId = mDatabase.push().getKey();
                            User user = new User(E1.getText().toString(), phone, E2.getText().toString());
                            mDatabase.child(userId).setValue(user);
                            Toast.makeText(ProfileActivity.this, "Login Created", Toast.LENGTH_SHORT).show();
                            Intent intent = new Intent(ProfileActivity.this, MainActivity.class);
                            Log.e("write", "write");
                            startActivity(intent);
                        } else {
                            Toast.makeText(ProfileActivity.this, "Phone number already registered.Check", Toast.LENGTH_SHORT).show();
                        }
                    }
                     else {
                        Toast.makeText(ProfileActivity.this, "Password Mismatch.Please check"+E2.getText().toString()+E2.getText().toString(), Toast.LENGTH_SHORT).show();
                    }
                }
            }
    );
}
}

我尝试使用 addListenerForSingleValueEvent 和 addValueEventListener。它读取数据库中的所有数据,但只有在保存当前数据后才会这样做。我的意思是仅在执行写入后才完成读取。请让我知道我哪里出错了

标签: androidfirebasefirebase-realtime-database

解决方案


尝试这个。

   DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
 @Override
 void onDataChange(DataSnapshot snapshot) {
 if (snapshot.hasChild("name")) {
 // run some code
 }
 }
});

.hasChild会告诉你用户是否已经在那里。如果它在那里,您可以继续登录,如果没有,则将用户添加到数据库中。


推荐阅读