Firebase数据库和身份验证中同一用户的UID不同

时间:2018-12-08 13:38:42

标签: android firebase firebase-realtime-database firebase-authentication

我需要检索我存储在Firebase数据库中的数据。但是它表明,UID在身份验证部分和数据库部分是不同的。

更新:现在,我试图从Firebase提取数据时遇到问题。我想在ListView中显示它。当我从登录活动(成功登录后)转到常规活动(我将ListView放到那里)时,它没有显示,并且活动从常规切换为登录一个。我将代码段附加在“ UPDATE CODE”下的底部。 帮助将不胜感激。谢谢!

The UIDS

这是注册代码

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_registration);
    setUpUIviews();

    firebaseAuth = FirebaseAuth.getInstance();

    db = FirebaseDatabase.getInstance().getReference().child("users");

    Register.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (validate()){
                String user_email = REmail.getText().toString().trim();
                String user_password = RPass.getText().toString().trim();

                firebaseAuth.createUserWithEmailAndPassword(user_email,user_password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {

                        if(task.isSuccessful()){
                            updateData();
                            Toast.makeText(Registration.this,"Registration Successful! ",Toast.LENGTH_SHORT).show();
                            startActivity(new Intent(Registration.this,MainActivity.class));
                        }else {
                            Toast.makeText(Registration.this,"Registration Unsuccessful ",Toast.LENGTH_SHORT).show();
                        }

                    }
                });
            }
        }
    });

这是更新数据部分:

private void updateData(){

    String uName = RName.getText().toString().trim();
    String uEmail = REmail.getText().toString().trim();

   String id = db.push().getKey();

   ProfileUpdate profileUpdate = new ProfileUpdate(uName,uEmail);

   db.child(id).setValue(profileUpdate);

   Toast.makeText(this,"Added info",Toast.LENGTH_SHORT).show();

}

更新代码

Login Activity

    public class LoginPage extends AppCompatActivity {

    private TextView userRegistration;
    private TextView Info;
    private EditText LName;
    private EditText LPass;
    private Button LSignIn;
    private int counter = 3;
    private FirebaseAuth firebaseAuth;
    private ProgressDialog progressDialog;

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

        userRegistration = (TextView)findViewById(R.id.tvRegister);
        LName = (EditText)findViewById(R.id.btnName);
        LPass = (EditText)findViewById(R.id.btnPass);
        LSignIn = (Button) findViewById(R.id.btnSignIn);
        Info = (TextView) findViewById(R.id.tvInfo);

         Info.setText( " No of attempts remaining: 3 " );

        firebaseAuth = FirebaseAuth.getInstance();
        progressDialog = new ProgressDialog(this);

        FirebaseUser user= null;

        if(user!=null){
           finish();
            startActivity(new Intent(LoginPage.this,General.class));
        }

         user = firebaseAuth.getCurrentUser();

        LSignIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                validate(LName.getText().toString(),LPass.getText().toString());
            }
        });

        userRegistration.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(LoginPage.this,Registration.class));
            }
        });


    }

    private void validate(String username, String password){

        progressDialog.setMessage("Processing your request.... ");
        progressDialog.show();

        firebaseAuth.signInWithEmailAndPassword(username,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if(task.isSuccessful()){
                    progressDialog.dismiss();
                    Toast.makeText(LoginPage.this,"Login successful!",Toast.LENGTH_SHORT).show();
                    startActivity(new Intent(LoginPage.this,General.class));
                }else {
                    Info.setText("No of attempts remaining: " + String.valueOf(counter-1));
                    Toast.makeText(LoginPage.this,"Please enter corrent credentials",Toast.LENGTH_SHORT).show();
                    counter --;
                    progressDialog.dismiss();
                    if(counter<=0){
                        LSignIn.setEnabled(false);
                    }
                }
            }
        });


    }


}


General Activity

    public class General extends AppCompatActivity {

    private FirebaseAuth firebaseAuth;
    private Button Logout;

    ListView l1;
    ArrayAdapter<String> adapter;
    DatabaseReference databaseReference;
    FirebaseUser user;
    List<String> itemlist;
    String uid;




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


        firebaseAuth = FirebaseAuth.getInstance();
        Logout = (Button) findViewById(R.id.btnLogout);

        l1 = (ListView)findViewById(R.id.listView);
        user = FirebaseAuth.getInstance().getCurrentUser();
        uid = user.getUid();
        itemlist = new ArrayList<>();

        databaseReference = FirebaseDatabase.getInstance().getReference();

        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                itemlist.clear();;
                String user_name = dataSnapshot.child(uid).child("usrName").getValue(String.class);
                String user_email = dataSnapshot.child(uid).child("ursEmail").getValue(String.class);

                itemlist.add(user_name);
                itemlist.add(user_email);

                adapter = new ArrayAdapter<>(General.this,android.R.layout.simple_list_item_1,itemlist);
                l1.setAdapter(adapter);
            }

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

            }
        });


        Logout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                firebaseAuth.signOut();
                finish();
                startActivity(new Intent(General.this, MainActivity.class));
            }
        });


    }


}


activity_general.xml file

    <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/myApp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".General">

    <Button
        android:id="@+id/btnLogout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:text="LOGOUT"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.467"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/listView" />

    <ListView
        android:id="@+id/listView"
        android:layout_width="368dp"
        android:layout_height="270dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

设计

enter image description here

1 个答案:

答案 0 :(得分:1)

这是将用户数据存储到datbase中的代码:

String id = db.push().getKey();

ProfileUpdate profileUpdate = new ProfileUpdate(uName,uEmail);

db.child(id).setValue(profileUpdate);

在第一行中,您调用push().getKey()以从数据库SDK获得新的唯一ID。该ID与用户个人资料无关。

如果要在用户的UID下存储用户,则需要在创建用户后从AuthResult获取UID。像这样:

String uid = task.getResult().getUser().getUid();

当将此uid传递给updateData方法时,您将使用以下方法在数据库中创建子节点:

db.child(uid).setValue(profileUpdate);
相关问题