Как получить пользовательский идентификатор из firebase на Android?

Я хочу сохранить данные в firebase. Это мой код активности:

private Firebase firebaseRef;
Firebase.setAndroidContext(this);

try {
    mUserId = firebaseRef.getAuth().getUid();
} catch (Exception e) {
    //  loginWithMailView();
}
itemsUrl = Constants.FIREBASE_URL + "/Person/" + mUserId +"/Information/";

//Person + null (?) + the other information

и это для моего кода кнопки:

buttonSave = (Button) findViewById(R.id.btnKaydolKayit);
buttonSave.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        firebaseRef = new Firebase(Constants.FIREBASE_URL);
        String name = editTextName.getText().toString().trim();
        String surname = editTextSurname.getText().toString().trim();
        String gender = final_result.getText().toString();
        String mail = editTextMail.getText().toString();
        String pass = editTextPass.getText().toString().trim();
        String phone = editTextPhone.getText().toString().trim();
        String trom = final_resultT.getText().toString();
        String bloodGroup = spinnerBlood.getSelectedItem().toString();
        String dateBlood = dateTextViewBlood.getText().toString();
        String dateTrombo = dateTextViewTrom.getText().toString();

        if (pass.isEmpty() || mail.isEmpty()) {
            AlertDialog.Builder builder = new AlertDialog.Builder(KaydolActivity.this);
            builder.setMessage(R.string.signup_error_message)
                    .setTitle(R.string.signup_error_title)
                    .setPositiveButton(android.R.string.ok, null);
            AlertDialog dialog = builder.create();
            dialog.show();
        } else {
            firebaseRef.createUser(mail, pass, new Firebase.ResultHandler(){

                @Override
                public void onSuccess() {
                    firebaseRef = new Firebase(Constants.FIREBASE_URL);
                    //  firebaseRef.setValue();
                    AlertDialog.Builder builder = new AlertDialog.Builder(KaydolActivity.this);
                    builder.setMessage("Hesap başarılı bir şekilde oluşturuldu!").setPositiveButton(R.string.login_button_label, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            Intent intent = new Intent(KaydolActivity.this, loginWithMail.class);
                            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                            startActivity(intent);
                        }
                    });
                    AlertDialog dialog = builder.create();
                    dialog.show();
                }

                @Override
                public void onError(FirebaseError firebaseError) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(KaydolActivity.this);
                    builder.setMessage(firebaseError.getMessage())
                            .setTitle(R.string.signup_error_title)
                            .setPositiveButton(android.R.string.ok, null);
                    AlertDialog dialog = builder.create();
                    dialog.show();
                }
            });
        }

        new Firebase(itemsUrl).push().child("name").setValue(name);
        new Firebase(itemsUrl).push().child("surname").setValue(surname);
        new Firebase(itemsUrl).push().child("gender").setValue(gender);
        new Firebase(itemsUrl).push().child("mail").setValue(mail);
        new Firebase(itemsUrl).push().child("pass").setValue(pass);
        new Firebase(itemsUrl).push().child("phone").setValue(phone);
        new Firebase(itemsUrl).push().child("trom").setValue(trom);
        new Firebase(itemsUrl).push().child("bloodGroup").setValue(bloodGroup);
        new Firebase(itemsUrl).push().child("trom").setValue(trom);
        new Firebase(itemsUrl).push().child("dateBlood").setValue(dateBlood);
        new Firebase(itemsUrl).push().child("dateTrombo").setValue(dateTrombo);
    }
});

мой исходный код (для справки/например): https://www.sitepoint.com/creating-a-cloud-backend-for-your-android-app-using-firebase/

Когда я сохраняю данные в firebase в виде следующей фотографии (логин и аутентификация) введите здесь описание изображения

но mUserId имеет значение null. поэтому, когда я смотрю базу данных, mUserid имеет значение null (например, фото) введите здесь описание изображения


person eagle    schedule 01.06.2016    source источник
comment
Недавно Firebase претерпела серьезные изменения в API. Так что лучше всего обновить Firebase API. См. справку в этом руководстве: firebase.google.com/support/guides/firebase-android< /а>   -  person Talha Mir    schedule 01.06.2016
comment
можете ли вы Log mUserId в начальном блоке try посмотреть, есть ли какое-то значение или нет?   -  person Satyen Udeshi    schedule 01.06.2016
comment
Если user не вошел в систему, Firebase вернет null userid   -  person Satyen Udeshi    schedule 01.06.2016
comment
но я могу добавить пользователя. просто я хочу получить идентификатор пользователя. Итак, как я могу изменить этот код: mUserId = firebaseRef.getAuth().getUid() (новый google.firebase) @TalhaMir   -  person eagle    schedule 01.06.2016
comment
Вы должны войти в систему пользователя, чтобы использовать firebaseRef.getAuth().getUid(). В противном случае у вас нет возможности узнать UID конкретного пользователя без полной загрузки узла Person и его циклического просмотра.   -  person Sunshinator    schedule 01.06.2016
comment
Возможно, вы используете новую консоль Firebase, но код определенно по-прежнему использует Firebase 2.x SDK: new Firebase(itemsUrl).push().child("name").setValue(name);. Это продолжит работать, но вы, скорее всего, найдете помощь, если обновитесь до последней версии SDK.   -  person Frank van Puffelen    schedule 01.06.2016


Ответы (6)


Вы можете использовать эти строки кода для получения текущего пользовательского идентификатора с помощью Android Firebase Framework.

FirebaseUser currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser() ;
Toast.makeText(this, "" + currentFirebaseUser.getUid(), Toast.LENGTH_SHORT).show();
person Mr. Suryaa Jha    schedule 08.04.2017

Чтобы получить текущий UID пользователя, вам просто нужна эта строка кода:

String currentuser = FirebaseAuth.getInstance().getCurrentUser().getUid();
person Siddy Hacks    schedule 06.03.2018
comment
Это возвращает нулевое значение - person Sachin Burdak; 22.05.2021

проблема в том, что в firebase, когда вы создаете пользователя, он не входит в систему. Вот из документов:

Создает нового пользователя электронной почты/пароля с предоставленными учетными данными. Этот метод не аутентифицирует пользователя. После создания учетной записи пользователь может пройти аутентификацию с помощью authWithPassword(). https://www.firebase.com/docs/web/api/firebase/createuser.html

Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
    ref.authWithPassword(mail, pass, new Firebase.AuthResultHandler() {
        @Override
        public void onAuthenticated(AuthData authData) {
            System.out.println("User ID: " + authData.getUid() + ", Provider: " + authData.getProvider());
        }
        @Override
        public void onAuthenticationError(FirebaseError firebaseError) {
            // there was an error
        }
    });

Итак, как только ваш пользователь создан, вызовите функцию authWithPassword. Надеюсь, поможет!

person acrisfh    schedule 01.06.2016
comment
использовать authObject.signInWithEmailAndPassword(EMAIL, PASSWORD); - person Farasy; 17.06.2017

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

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
person CHETAN SHARMA    schedule 08.06.2020

в REACT NATIVE все именно так.

  import firebase as 'firebase';

    HandleGetUserId=()=>{
    let userId = firebase.auth().currentUser.uid;
    return userId;
    }

просто вызовите функцию HandleGetUserId, чтобы получить такой идентификатор

this.HandleGetUserId();
person Noe Fabellon    schedule 23.04.2019

У меня тоже была такая же проблема с получением uid. Когда я напечатал его в журнале (Log.i), я мог видеть uid, однако при попытке использовать его в качестве одного из полей в одном из моих создаваемых объектов поле не создается.

Я делал следующее: String currentUId = FirebaseAuth.getInstance().getCurrentUser().getUid();

Это не сработало для меня.

РЕШЕНИЕ, которое я обнаружил - (сработало для меня - попробуйте)

Использование: FirebaseUser currentU = FirebaseAuth.getInstance().getCurrentUser(); Строка uId = currentU.getUid();

person Arthur Imona    schedule 30.01.2019
comment
нет никакой разницы в обоих подходах, которые вы пытались объяснить. - person Faisal; 24.09.2019