Проверьте случайно сгенерированное имя пользователя, если оно существует в базе данных Firebase - PullRequest
0 голосов
/ 27 августа 2018

Я создаю приложение для социальных сетей. В приложении каждый пользователь имеет уникальное имя пользователя. Но я не прошу пользователя выбрать имя пользователя. Вместо того, чтобы заставлять пользователей выбирать имя пользователя, я генерирую случайное имя пользователя на основе имени-фамилии пользователя.

например

String a = name.getText.ToString();
int b = Random();
String username =a+b;

Но у меня сейчас проблема с проверкой имени пользователя в цикле. Я имею в виду, если мое случайное сгенерированное имя пользователя уже существует, просто сгенерируйте другое случайное имя пользователя и проверьте его, если оно тоже есть.

                                            final boolean[] durum = {false};
                                            while(durum[0] ==false){
                                                String usernameilk = namesurname.getText().toString().replace(" ","").replace("ç","c").replace("ğ","g").replace("ı","i").replace("ö","o").replace("ş","s").replace("ü","u").toLowerCase();
                                                int random = randomInt();
                                                String stringsayı=Integer.toString(random);
                                                final String usernameson = usernameilk+"."+stringsayı;
                                                database.child("users").child(usernameson).addValueEventListener(new ValueEventListener() {
                                                    @Override
                                                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                                        if(!dataSnapshot.exists()){
                                                            user.setPassword(password.getText().toString());
                                                            user.setEmail(email.getText().toString());
                                                            user.setNamesurname(namesurname.getText().toString());
                                                            durum[0] =true;
                                                            progressDialog.hide();




                                                        }
                                                    }

                                                    @Override
                                                    public void onCancelled(@NonNull DatabaseError databaseError) {

                                                    }
                                                });

                                            }

Я хочу что-то вроде этого;

for (int i = 0; i < 10000; i++) {
                                                int random = randomInt();
                                                String randomusername = namesurname.getText().toString()+random;
                                                database.child("users").child(randomusername).addValueEventListener(new ValueEventListener() {
                                                    @Override
                                                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                                        if(!dataSnapshot.exists()){
                                                            //if random username is not exist create user and finish loop

                                                            database.child("users").setValue(user);
                                                            break;

                                                            //but if its exist then countinue loop
                                                        }
                                                    }

                                                    @Override
                                                    public void onCancelled(@NonNull DatabaseError databaseError) {

                                                    }
                                                });



                                            }

1 Ответ

0 голосов
/ 28 августа 2018

Используйте этот способ ввода имени пользователя. Уже существует

Query q = yourRef.orderByKey().limitToLast(1);

затем выполните этот запрос как

q.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if(dataSnapshot.hasChildren()) { //  check to prevent null pointer exception
                ID = Integer.parseInt(dataSnapshot.getKey().toString().replaceAll("[\\D]", ""));
                //ID will have the recent added username's integerpart So 
                 increment in the value and set the value under this username or what 
                 ever you want to do
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Toast.makeText(addDealActivity.this, "Something is Wrong Check Data Connection...", Toast.LENGTH_SHORT).show();
        }
    });

Надеюсь, что это помогает Счастливое кодирование

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