java - Firebase如何正确检索数据并显示数据库中的数据

标签 java android firebase firebase-realtime-database

我正在尝试从 Firebase 中提取数据并显示用户的名称和状态。我目前遇到空点异常。

public class ProfileFragment extends Fragment {

private DatabaseReference mUserDatabase;
private FirebaseUser mCurrentUser;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view =  inflater.inflate(R.layout.fragment_profile, container, false);

    CircleImageView displayProfilePicture = view.findViewById(R.id.settings_profile_picture);
    final TextView mName = view.findViewById(R.id.settings_user_name);
    final TextView mStatus = view.findViewById(R.id.settings_user_status);

    mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();

    String current_uid = Objects.requireNonNull(mCurrentUser).getUid();

    mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);

    mUserDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            String name = (Objects.requireNonNull(dataSnapshot.child("name").getValue())).toString();
            String status = Objects.requireNonNull(dataSnapshot.child("status").getValue()).toString();
            String image = Objects.requireNonNull(dataSnapshot.child("image").getValue()).toString();
            String thumb_image = Objects.requireNonNull(dataSnapshot.child("thumb image ").getValue()).toString();

            mName.setText(name);
            mStatus.setText(status);

        }

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

        }


    });
    return view;
}}

我也尝试使用此代码以不同的方式实现这一点,但我仍然无法显示数据。

public class ProfileFragment extends Fragment {

private DatabaseReference mUserDatabase;
private FirebaseUser mCurrentUser;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view =  inflater.inflate(R.layout.fragment_profile, container, false);

    CircleImageView displayProfilePicture = view.findViewById(R.id.settings_profile_picture);
    final TextView mName = view.findViewById(R.id.settings_user_name);
    final TextView mStatus = view.findViewById(R.id.settings_user_status);

    mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();

    String current_uid = Objects.requireNonNull(mCurrentUser).getUid();

    mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);

    mUserDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot datas: dataSnapshot.getChildren()){
                String keys=datas.getKey();
                String displayname=datas.child("name").getValue().toString();

                mName.setText(displayname);
        }}

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

        }


    });
    return view;
}}

我的数据库结构如下:

Database Structure

最佳答案

由于您已经拥有userId,因此您无需循环即可访问直接子级。

尝试以下操作:

 mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);

mUserDatabase.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            String keys=dataSnapshot.getKey();
            String displayname=dataSnapshot.child("name").getValue().toString();

            mName.setText(displayname);
    }}

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

    }  
 });

关于java - Firebase如何正确检索数据并显示数据库中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52182289/

相关文章:

javascript - 更新后的 Firebase-Functions 错误。我能做些什么?

java - 扩展文件 - 复制和使用

java - DataTables 服务器端分页

android - Android Studio项目结构中的 "com.example.helloWorld(androidTest)"包是什么

Android studio 在不重新安装的情况下启动应用程序

xcode - 在 Firebase 中查询特定字符串?

Java Json/Gson 将 json 编码的字符串放入 jsonObject 中,不进行字符串转义

java - 遇到错误

android - 清除 GridView 并在 android 中重新生成它

javascript - 获取 child 的键/值对