如何在安卓设备上从Firebase获取用户UID?

21

我想将数据保存到 Firebase。这是我的 Activity 代码:

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中时(登录和认证):enter image description here

但是mUserId为空。所以当我查看数据库时,mUserid为空(就像照片中那样):enter image description here


你能否在初始的try块中记录下你的mUserId并查看它是否有值呢? - Satyen Udeshi
但我可以添加一个用户。我只想获取用户ID。那么我该如何更改这段代码:mUserId = firebaseRef.getAuth().getUid()(新的google.firebase)@TalhaMir - eagle
如果不登录用户,就无法使用 firebaseRef.getAuth().getUid()。否则,您将无法在不完全下载节点 Person 并循环遍历它的情况下知道特定用户的 UID。 - Sunshinator
你可能正在使用新的Firebase控制台,但代码肯定仍在使用Firebase 2.x SDK:new Firebase(itemsUrl).push().child("name").setValue(name);。这仍将继续工作,但如果您升级到最新的SDK,您可能会找到更好的帮助。 - Frank van Puffelen
我不确定你的问题是什么,但在你分享的代码中没有记录用户登录的内容。因此,firebaseRef.getAuth()将返回null,这导致mUserIdnull(并且你的代码会忽略NullPointerException)。如果你想要一个当前用户,你必须让他们登录:https://www.firebase.com/docs/android/guide/user-auth.html#section-logging-in - Frank van Puffelen
显示剩余2条评论
6个回答

36

您可以使用以下代码行通过Android Firebase框架获取当前用户的Uid

FirebaseUser currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser() ;
Toast.makeText(this, "" + currentFirebaseUser.getUid(), Toast.LENGTH_SHORT).show();

17

想获得当前用户的UID,您只需使用以下代码:

String currentuser = FirebaseAuth.getInstance().getCurrentUser().getUid();

这返回了空值。 - Sachin Burdak

3
问题在于,在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函数。希望这有所帮助!


使用 authObject.signInWithEmailAndPassword(EMAIL, PASSWORD); - Farasy

3
在你的代码中,firebaseRef 似乎为 null,因此导致 uid 为空,从 Firebase 获取用户 id 的推荐方式是在用户登录后的任何位置执行以下操作。
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

0
在 React Native 中,就像这样。
  import firebase as 'firebase';

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

只需调用 HandleGetUserId 函数,就可以像这样获取 id。
this.HandleGetUserId();

-1

我也遇到了同样的问题,无法获取uid。

当我在日志(Log.i)中将其打印出来时,我能够看到uid,但是当尝试将其作为正在创建的对象中的字段之一时,该字段未被创建。

我一直在使用以下代码:String currentUId = FirebaseAuth.getInstance().getCurrentUser().getUid();

但这对我来说并不起作用。

我找到了一个解决方案 -(适用于我-请试试)

使用以下代码:FirebaseUser currentU = FirebaseAuth.getInstance().getCurrentUser(); String uId = currentU.getUid();


你尝试解释的两种方法没有区别。 - Faisal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接