在使用Java在Android中编写之前,如何从Firebase数据库中读取已经存在的数据

时间:2019-02-06 08:23:04

标签: android firebase firebase-realtime-database

我正在开发一个android应用。我正在将Firebase用于后端服务。我想根据他们的电话号码对他们进行身份验证。一个电话号码不能使用多个用户帐户。

数据库结构如下所示。

enter image description here

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

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

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,它读取数据库中的所有数据,但仅在保存当前数据后才执行。我的意思是只有在执行写操作之后才进行读操作。请让我知道我要去哪里了

1 个答案:

答案 0 :(得分:0)

尝试一下。

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

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