早上好,希望大家都好。
我想从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数据
1条答案
按热度按时间r3i60tvu1#
不,只是应用程序不显示任何内容,并且在logcat中所有属性都为null。
这是因为您试图从不存在的位置读取用户数据。当您创建以下引用并将侦听器附加到它时:
这意味着您要读取节点下的数据,即在身份验证过程中提供的用户UID。这样的UID包含28个字符,看起来像这样:
另一方面,在您的数据库中,没有这样的节点:
看到了吗?这些节点是使用DatabaseReference#push()方法创建的。为了解决这个问题,当您在数据库中创建用户数据时,请删除对push()的调用,因为每次调用它时,它都会生成一个新的随机ID。相反,使用用户的UID。在代码中,它将像下面这样简单: