Android 最近在firebase数据库结构中添加了一个子项,不再工作

Android 最近在firebase数据库结构中添加了一个子项,不再工作,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,诱惑类 public class AllUsers { private String Name; private String Status; private String Image; public AllUsers (){ } public AllUsers(String name, String status, String Image) { Name = name; Status = status;

诱惑类

public class AllUsers {

    private String Name;
    private String Status;
    private String Image;

    public AllUsers (){
    }

    public AllUsers(String name, String status, String Image) {
        Name = name;
        Status = status;
        Image = Image;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getStatus() {
        return Status;
    }

    public void setStatus(String status) {
        Status = status;
    }

    public String getImage() {
        return Image;
    }

    public void setImage(String image) {
        Image = image;
    }
}
碎片

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_contacts, container, false);


    noUsersText = (TextView) rootView.findViewById(R.id.noUsersText);
    mUsersList = (RecyclerView) rootView.findViewById(R.id.usersList);

    mAuth = FirebaseAuth.getInstance();
    currentUser = mAuth.getCurrentUser();
    UID = mAuth.getCurrentUser().getUid();
    mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users");


    mProgressDialogue = new ProgressDialog(getActivity());
    mProgressDialogue.setMessage("Loading...");
    mProgressDialogue.show();


    mUsersList.setLayoutManager(new LinearLayoutManager(getActivity()));

    FirebaseRecyclerOptions<AllUsers> options =
            new FirebaseRecyclerOptions.Builder<AllUsers>()
                    .setQuery(mDatabaseReference, AllUsers.class)
                    .build();

    firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<AllUsers, UsersViewHolder>(options) {

        @Override
        protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull AllUsers model) {
            holder.setName(model.getName());
            holder.setStatus(model.getStatus());

            final String userId = getRef(position).getKey();

            holder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("Users").child(userId).child("Data");

                    rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            userName = dataSnapshot.child("Name").getValue().toString();
                            Intent intent = new Intent(getActivity(), Chat.class);
                            intent.putExtra("Recievers_Id", userId);
                            intent.putExtra("Recievers_Name", userName);
                            startActivity(intent);
                        }
                        @Override
                        public void onCancelled(DatabaseError databaseError) {
                        }
                    });
                }
            });
        }


        @Override
        public UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.all_users_layout, parent, false);
            return new UsersViewHolder(view);
        }
    };
    mUsersList.setAdapter(firebaseRecyclerAdapter);
    return rootView;
}


public static class UsersViewHolder extends RecyclerView.ViewHolder{
    View mView;
    public UsersViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
    }
    public void setName(String name) {
        TextView mDisplayName = (TextView) mView.findViewById(R.id.display_name);
        mDisplayName.setText(name);
    }
    public void setStatus(String status) {
        TextView mDisplayStatus = (TextView) mView.findViewById(R.id.display_status);
        mDisplayStatus.setText(status);
    }
}


@Override
public void onStart() {
    super.onStart();
    firebaseRecyclerAdapter.startListening();
}
@Override
public void onStop() {
    super.onStop();
    if(firebaseRecyclerAdapter != null) {
        firebaseRecyclerAdapter.stopListening();
    }
}
}
}

为此,您必须将数据库引用更改为-

mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(userId);
例如:-

mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child("VwtdCRK0aXQ2bnKe01fy8mYUPqs2");

如果您现在查看
/Users/VwtdCRK0aXQ2bnKe01fy8mYUPqs2
的每个子级下的数据,则它不具有
AllUsers
类所具有的任何属性。因为您似乎刚刚在JSON树中引入了
数据
级别,所以您需要确保Java类反映了这一点。这在本例中非常简单,只需引入一个新类,该类将您的
AllUsers
类作为名为
Data
的属性:

public class AllUsersRoot {
  public AllUsers Data;
}
现在,您可以将这个
AllUsersRoot
类连接到您的适配器:

FirebaseRecyclerOptions<AllUsersRoot> options =
        new FirebaseRecyclerOptions.Builder<AllUsersRoot>()
                .setQuery(mDatabaseReference, AllUsersRoot.class)
                .build();

firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<AllUsersRoot, UsersViewHolder>(options) {

    @Override
    protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull AllUsers model) {
        holder.setName(model.Data.getName());
        holder.setStatus(model.Data.getStatus());

您的问题中包含了一个指向JSON树图片的链接。请将其替换为实际的JSON文本,您可以通过单击中的导出JSON链接轻松获取。将JSON作为文本使其可搜索,允许我们轻松使用它来测试您的实际数据,并在我们的答案中使用它,这通常是一件好事。对不起,请看我编辑的问题
FirebaseRecyclerOptions<AllUsersRoot> options =
        new FirebaseRecyclerOptions.Builder<AllUsersRoot>()
                .setQuery(mDatabaseReference, AllUsersRoot.class)
                .build();

firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<AllUsersRoot, UsersViewHolder>(options) {

    @Override
    protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull AllUsers model) {
        holder.setName(model.Data.getName());
        holder.setStatus(model.Data.getStatus());
Users" : {
  "VwtdCRK0aXQ2bnKe01fy8mYUPqs2" : {
    "Image" : "https://firebasestorage.googleapis.com/v0/b/messageplus-cd647.appspot.com/o/Raw%2FVwtdCRK0aXQ2bnKe01fy8mYUPqs2.jpg?alt=media&token=a385e502-1068-4efc-a2d8-bd9037201b5f",
    "Name" : "Akash R",
    "Phone_Number" : "8105571584",
    "Status" : "None of your business",
    "Thumb_image" : "Default",
    "Unique" : "VwtdCRK0aXQ2bnKe01fy8mYUPqs2"
  },
},
"Quizes" : {
  "VwtdCRK0aXQ2bnKe01fy8mYUPqs2" : {
    "Question1" : { ... },
    ...
  }
},
"Reviews" : {
  "VwtdCRK0aXQ2bnKe01fy8mYUPqs2" : {
    "Review" : "Hiiii"
  }
}