Я занимаюсь разработкой приложения для Android.Я использую Firebase для бэкэнд-сервисов.Я хочу аутентифицировать людей на основе их телефонных номеров.Многопользовательская учетная запись не должна быть возможна для номера телефона.
Структура базы данных, как показано ниже.
![enter image description here](https://i.stack.imgur.com/PPa2M.png)
Если другой пользователь вводит тот же номер телефона, мы не должны разрешать вход в систему.Поэтому я написал код следующим образом:
При нажатии кнопки я попытался прочитать всю информацию о пользователе и сохранить ее в списке. Затем проверьте существующие телефонные номера в базе данных с текущим номером телефона.Если данные уже существуют, данные не будут сохранены.В противном случае данные будут храниться
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. Он считывает все данные, которые есть в базе данных, но это происходит только после сохранения текущих данных.Я имею в виду, что чтение выполняется только после выполнения записи.Пожалуйста, дайте мне знать, где я иду не так