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"
}
}