使用android studio从firebase检索数据

pw9qyyiw  于 2023-04-10  发布在  Android
关注(0)|答案(1)|浏览(181)

早上好,希望大家都好。
我想从Firebase实时数据库检索数据,并使用Firebase实时数据库和身份验证数据库将其显示在配置文件用户中,并且有代码可以理解。
先谢谢你了
注册:

mAuth.createUserWithEmailAndPassword(email, password)
                    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
                                FirebaseUser user = mAuth.getCurrentUser();
                                Users users = new Users(name, email, password, phonenumber);

                                databaseReference.setValue(users);//.push()
                                
                                startActivity(new Intent(SignUp.this, Home.class));
                                finish();

                            } else {
                                Toast.makeText(SignUp.this, "Register failed.",
                                        Toast.LENGTH_SHORT).show();
                            }
                        }
                    });

配置文件xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:layout_width="match_parent"
    android:background="@color/white"
    android:layout_height="match_parent"
    tools:context=".Profile">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp">
        <LinearLayout
            android:id="@+id/linear"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:background="@drawable/buttonstyle2"
            android:elevation="5dp"
            android:layout_marginStart="10dp"
            android:layout_marginTop="20dp"
            android:padding="10dp"
            android:layout_marginBottom="10dp"
            android:gravity="center">
            <ImageView
                android:id="@+id/back"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/back"/>

        </LinearLayout>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_toEndOf="@id/linear"
            android:layout_marginTop="26dp"
            android:text="Mon Profile "
            android:textColor="@color/black"
            android:textSize="22sp"
            android:fontFamily="@font/poppins_semibold"
            android:gravity="center"
            />
    </RelativeLayout>

    <TextView
        android:id="@+id/tname"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="nom"
        android:fontFamily="@font/poppins_semibold"
        android:textColor="@color/black"
        android:layout_marginStart="30dp"
        android:layout_marginTop="20dp"
        android:textSize="16sp"/>

    <TextView
        android:id="@+id/temail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="email"
        android:fontFamily="@font/poppins_semibold"
        android:textColor="@color/black"
        android:layout_marginStart="30dp"
        android:layout_marginTop="20dp"
        android:textSize="16sp"/>

    <TextView
        android:id="@+id/tphonenumber"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="numéro "
        android:fontFamily="@font/poppins_semibold"
        android:textColor="@color/black"
        android:layout_marginStart="30dp"
        android:layout_marginTop="20dp"
        android:textSize="16sp"/>

    <TextView
        android:id="@+id/tpassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="mot de passe"
        android:fontFamily="@font/poppins_semibold"
        android:textColor="@color/black"
        android:layout_marginStart="30dp"
        android:layout_marginTop="20dp"
        android:textSize="16sp"/>

    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/editProfileButton"
        android:layout_width="match_parent"
        android:layout_marginTop="37dp"
        android:layout_height="50dp"
        android:layout_marginHorizontal="90dp"
        android:layout_marginBottom="30dp"
        android:text="Modifier Profile"
        android:fontFamily="@font/poppins_semibold"
        android:textColor="@color/white"
        android:textAllCaps="false"
        android:textSize="18sp"
        android:textStyle="bold"
        android:background="@drawable/buttonstyle1"/>
</LinearLayout>

我为www.example.com做了这段代码Profile.java,但它不起作用:

public class Profile extends AppCompatActivity {
    ImageView back;
    AppCompatButton mEditButton;

    private DatabaseReference mDatabase;\
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_profile);

        back = findViewById(R.id.back);

        // In your onCreate method:
        FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
        mDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUser.getUid());

        mDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                // Get user data from the dataSnapshot
                String email = dataSnapshot.child("email").getValue(String.class);
                String name = dataSnapshot.child("name").getValue(String.class);
                String password = dataSnapshot.child("password").getValue(String.class);
                String phoneNumber = dataSnapshot.child("phonenumber").getValue(String.class);

                // Display user data in profile
                TextView emailTextView = findViewById(R.id.temail);
                emailTextView.setText(email);

                TextView nameTextView = findViewById(R.id.tname);
                nameTextView.setText(name);

                TextView passwordTextView = findViewById(R.id.tpassword);
                passwordTextView.setText(password);

                TextView phoneNumberTextView = findViewById(R.id.tphonenumber);
                phoneNumberTextView.setText(phoneNumber);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.d(TAG, "onCancelled: " + databaseError.getMessage());
            }
        });
    }
}

实时数据

auth数据

r3i60tvu

r3i60tvu1#

不,只是应用程序不显示任何内容,并且在logcat中所有属性都为null。
这是因为您试图从不存在的位置读取用户数据。当您创建以下引用并将侦听器附加到它时:

mDatabase = FirebaseDatabase.getInstance().getReference()                              
                                          .child("Users")
                                          .child(currentUser.getUid());
//                                                              👍

这意味着您要读取节点下的数据,即在身份验证过程中提供的用户UID。这样的UID包含28个字符,看起来像这样:

另一方面,在您的数据库中,没有这样的节点:

看到了吗?这些节点是使用DatabaseReference#push()方法创建的。为了解决这个问题,当您在数据库中创建用户数据时,请删除对push()的调用,因为每次调用它时,它都会生成一个新的随机ID。相反,使用用户的UID。在代码中,它将像下面这样简单:

mDatabase.setValue(userObj);

相关问题