簡體   English   中英

如何從android上的firebase獲取用戶uid?

[英]How to get user uid from firebase on 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 為空。 所以當我看數據庫 mUserid 是空的(就像一張照片) 在此處輸入圖片說明

您可以使用這些代碼行通過 Android Firebase 框架獲取當前用戶 Uid

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

要獲取當前用戶 UID,您只需要這行代碼:

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

問題是在 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 函數。 希望有幫助!

在您的代碼中,您的 firebaseRef 似乎為 null,因此導致 null uid ,從 Firebase 獲取用戶 ID 的推薦方法是在用戶登錄后在您的應用程序中的任何位置執行以下操作

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

在 REACT NATIVE 中就是這樣。

  import firebase as 'firebase';

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

只需調用函數 HandleGetUserId 即可獲取這樣的 id

this.HandleGetUserId();

我在獲取 uid 時也遇到了同樣的問題。 當我將它打印在日志 (Log.i) 上時,我可以看到 uid,但是當嘗試將它用作正在創建的對象之一中的字段之一時,該字段沒有被創建。

我正在做的事情: String currentUId = FirebaseAuth.getInstance().getCurrentUser().getUid();

這對我來說效果不佳。

我發現的解決方案 - (對我有用 - 試試看)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM