Как прочитать уже выходящие данные из базы данных Firebase перед записью в Android с помощью Java - PullRequest
0 голосов
/ 06 февраля 2019

Я занимаюсь разработкой приложения для 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 голосов
/ 06 февраля 2019

Попробуйте это.

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

.hasChild скажет вам, есть ли пользователь уже там или нет.Если он есть, вы можете перейти к входу в систему, а если нет, то добавить пользователя в базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...