Java 我无法从Firebase获取值,并将它们放入片段中的TextView
在我的应用程序中,我创建了登录和注册页面,并将用户名和电子邮件保存到我的Firebase数据库中。我还使用fragment进行了底部导航。我想从Firebase获取这些值(名称、邮件),并将其放入profile fragment中的TextView中。当我尝试这个时,我的应用程序崩溃了。我怎样才能解决这个问题Java 我无法从Firebase获取值,并将它们放入片段中的TextView,java,android,firebase,android-fragments,firebase-realtime-database,Java,Android,Firebase,Android Fragments,Firebase Realtime Database,在我的应用程序中,我创建了登录和注册页面,并将用户名和电子邮件保存到我的Firebase数据库中。我还使用fragment进行了底部导航。我想从Firebase获取这些值(名称、邮件),并将其放入profile fragment中的TextView中。当我尝试这个时,我的应用程序崩溃了。我怎样才能解决这个问题 public class ProfileFragment extends Fragment { private FirebaseDatabase mFirebaseDatabase
public class ProfileFragment extends Fragment {
private FirebaseDatabase mFirebaseDatabase;
private FirebaseAuth mAuth;
private String userID;
private TextView tName;
private TextView tEmail;
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View profileView = inflater.inflate(R.layout.fragment_profile, null);
tName=profileView.findViewById(R.id.tv_name);
tEmail=profileView.findViewById(R.id.tv_email);
mAuth=FirebaseAuth.getInstance();
mFirebaseDatabase=FirebaseDatabase.getInstance();
final DatabaseReference myRef=mFirebaseDatabase.getReference("users");
FirebaseUser user=mAuth.getCurrentUser();
userID=user.getUid();
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds: dataSnapshot.getChildren()){
User user=new User();
user.setUserName(ds.child(userID).getValue(User.class).getUserName());
user.setUserEmail(ds.child(userID).getValue(User.class).getUserEmail());
tName.setText(user.getUserName());
tEmail.setText(user.getUserEmail());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
return profileView;
}
}
在xml文件夹中创建文件
<?xml version="1.0" encoding="utf-8"?>
<defaultsMap>
<entry>
<key>email</key>
<value>name</value>
</entry>
假设您的数据库结构与此类似:
Firebase-root
|
--- users
|
--- uid
|
--- name: "John"
|
--- email: "john@email.com"
要打印姓名和电子邮件,请使用模型类使用以下代码:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
String name = user.getUserName();
tName.setText(name);
String email = user.getUserEmail();
tEmail.setText(email);
Log.d("TAG", name + " / " + email);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
如果要使用String类更简单地打印它们,请使用以下代码:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String name = dataSnapshot.child("name").getValue(String.class);
tName.setText(name);
String email = dataSnapshot.child("email").getValue(String.class);
tEmail.setText(email);
Log.d("TAG", name + " / " + email);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
在这两种情况下,输出都是:
John/john@email.com
我们需要查看您的数据库结构:)同时发布您的错误!ı没有足够的代表上载图像。我可以很容易地解释,在我的firebase数据库中,有用户引用,在用户引用中,有几个子名称用户id和子值名称emailFATAL EXCEPTION:main Process:com.example.burak.anonstezapp,PID:22212 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String com.example.burak.anonstezapp.User.getUserName()”。感谢您的帮助,您救了我:)
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String name = dataSnapshot.child("name").getValue(String.class);
tName.setText(name);
String email = dataSnapshot.child("email").getValue(String.class);
tEmail.setText(email);
Log.d("TAG", name + " / " + email);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);