Получить Uid после входа в Firebase Android - PullRequest
0 голосов
/ 29 апреля 2018

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

public class LoginActivity extends AppCompatActivity {

    FirebaseDatabase database = FirebaseDatabase.getInstance();
    private DatabaseReference mdatabase;
    private DatabaseReference fdatabase;
    FirebaseAuth auth = FirebaseAuth.getInstance();
    FirebaseUser user = auth.getCurrentUser();

    private EditText txtEmailLogin;
    private EditText txtPassLogin;
    private FirebaseAuth firebaseAuth;
    private FirebaseAuth.AuthStateListener mAuthlistener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        txtEmailLogin = findViewById(R.id.EmailEditText);
        txtPassLogin = findViewById(R.id.PassEditText);
        firebaseAuth = FirebaseAuth.getInstance();
        //controleert als er ingelogd moet worden of niet.
       /* if (firebaseAuth.getCurrentUser() != null)
        {
            Intent i = new Intent(LoginActivity.this, Home.class);
            i.putExtra("Email", firebaseAuth.getCurrentUser().getEmail());
            startActivity(i);
        }*/

    }
    public void btnregister_Click(View v) {
        Intent i = new Intent(LoginActivity.this,RegisterActivity.class);
        startActivity(i);
    }

   public void btnLogin_Click(View v){

        ProgressDialog progressDialog = ProgressDialog.show(LoginActivity.this,"Please Wait...", "Processing...", true);

        (firebaseAuth.signInWithEmailAndPassword(txtEmailLogin.getText().toString(), txtPassLogin.getText().toString()))
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {

                if(task.isSuccessful()) {
                    Toast.makeText(LoginActivity.this ,"Login Succesfull" ,Toast.LENGTH_SHORT).show();
                    Intent i = new Intent(LoginActivity.this, Home.class);
                    startActivity(i);
                }
                else
                {
                    Log.e("Error", task.getException().toString());
                    Toast.makeText(LoginActivity.this, task.getException().getMessage(),Toast.LENGTH_LONG).show();
                }
            }
        });
    }
}



public class Home extends AppCompatActivity {

    FirebaseAuth mAuth;
    FirebaseAuth.AuthStateListener mAuthListener;
    TextView txtUserNaam;
    String uid,UserName;
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference mdatabase;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        mAuth=FirebaseAuth.getInstance();
        mAuthListener=new FirebaseAuth.AuthStateListener() {

            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

                if (mAuth.getCurrentUser().getUid() == null) {

                    //Your action here
                    Intent i = new Intent(Home.this, LoginActivity.class);
                    startActivity(i);

                } else {

                    txtUserNaam = findViewById(R.id.txtusernaam);

                    mdatabase.child("USERS").child(firebaseAuth.getCurrentUser().getUid()).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            UserName = dataSnapshot.child("UserName").getValue(String.class);
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {    
                        }
                    });
                    txtUserNaam.setText(UserName);
                }

            }
        };
    }
}

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

AuthStateListener используется для наблюдения за изменениями в состоянии входа пользователя. Таким образом, вы должны иметь его в вашей LoginActivity

mAuthListener = new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        if (firebaseAuth.getCurrentUser() != null) {
            // intent call to second activity
        }
    }
}

Вы можете привязать слушателя к Auth в методе onStart (), как показано ниже

@Override
protected void onStart() {
    super.onStart();
    mAuth.addAuthStateListener(mAuthListener);
}

Для получения текущих зарегистрированных данных пользователя вы можете использовать

FirebaseAuth.getInstance().getCurrentUser().getUid();

это вернет UID в виде строки.

0 голосов
/ 29 апреля 2018

Вместо объявления

FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();

Добавьте это в свой OnCreate

FirebaseUser mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
    if (mCurrentUser != null) {
        uid = mCurrentUser.getUid();

Тогда, если вы хотите, вы можете объявить свой uid как public static String uid, чтобы вам не пришлось переписывать код и можно было просто использовать переменную

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