我现在正在保存帖子功能。我希望在一个活动中显示所有保存的帖子。我做了一个活动,其中是RecyclerView,我存储了所有帖子,我已经制作了PostRow活动。我有这个数据库: 。我想获得用户保存的所有帖子,我不知道如何从数据库中获取它们。我做了PostAdapter:
public class PostAdapter extends RecyclerView.Adapter<PostAdapter.PostViewHolder>{
private List<Post> mPostList;
private boolean mProcessLike = false;
private String mSinglePostId;
private Context mCtx;
private DatabaseReference mDatabaseUsers;
private FirebaseUser mCurrentUser;
public PostAdapter (List<Post> postList, DatabaseReference databaseUsers, Context ctx){
this.mPostList = postList;
this.mDatabaseUsers = databaseUsers;
this.mCtx = ctx;
this.mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
}
@Override
public PostAdapter.PostViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.post_row, parent, false);
PostViewHolder postViewHolder = new PostViewHolder(v);
return postViewHolder;
}
@Override
public void onBindViewHolder(final PostAdapter.PostViewHolder holder, int position) {
Post post = mPostList.get(position);
holder.setTitle(post.getTitle());
holder.setImage(post.getImage());
holder.setPostId(post.getPostId());
holder.setLikeButton(holder.getPostId());
holder.getView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent postSingle = new Intent(mCtx, SinglePostActivity.class);
postSingle.putExtra("postId", holder.getPostId());
mCtx.startActivity(postSingle);
}
});
holder.getLikeBtn().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mProcessLike = true;
mDatabaseUsers.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (mProcessLike){
if(dataSnapshot.child("saved").hasChild(holder.getPostId())){
mDatabaseUsers.child("saved")
.child(holder.getPostId())
.removeValue();
mProcessLike = false;
}else {
mDatabaseUsers.child("saved")
.child(holder.getPostId())
.setValue("saved");
mProcessLike = false;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
}
@Override
public int getItemCount() {
return mPostList.size();
}
public static class PostViewHolder extends RecyclerView.ViewHolder{
private TextView mPostTitle;
private ImageView mPostImage;
private Context mCtx;
private DatabaseReference mDatabaseUsers;
private FirebaseUser mCurrentUser;
private ImageButton mLikeBtn;
private String postId;
private View mView;
public PostViewHolder(View itemView) {
super(itemView);
this.mPostTitle = (TextView) itemView.findViewById(R.id.post_title);
this.mPostImage = (ImageView) itemView.findViewById(R.id.post_image);
this.mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
this.mDatabaseUsers = FirebaseDatabase.getInstance().getReference().child("Users").child(mCurrentUser.getUid());
this.mLikeBtn = (ImageButton) itemView.findViewById(R.id.like_btn);
this.mCtx = itemView.getContext();
this.mView = itemView;
}
public void setTitle(String title){
mPostTitle.setText(title);
}
public void setImage(String image){
Picasso.with(mCtx).load(image).into(mPostImage);
}
public void setPostId(String id){
this.postId = id;
}
public String getPostId(){
return this.postId;
}
public void setLikeButton(final String postKey) {
mDatabaseUsers.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.child("saved").hasChild(postKey)){
mLikeBtn.setImageResource(R.drawable.ic_favorite_pink_48dp);
}else{
mLikeBtn.setImageResource(R.drawable.ic_favorite_black_24dp);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
public ImageButton getLikeBtn() {
return this.mLikeBtn;
}
public View getView() {
return this.mView;
}
}
}
答案 0 :(得分:0)
我建议您更改数据库结构,尤其是books
节点上的数据库结构,如下所示:
{
"books":{
"2ExF2vKltibqCbE0oVOEHkYSRi2":{ /* the user key*/
/*list of books saved by that user*/
"-L2L2UgB...":{
"title":"Title goes here"
},
"-anotherBookKey":{
"title":"Title goes here"
}
},
"anotherUserKey":{
"hisSavedBookKey":{
"title":"Title goes here"
}
}
},
"users" : {
"2ExF2vKltibqCbE0oVOEHkYSRi2" : {
"image" : "...",
"name" : "Karol546",
"saved" : {
"-L2L2UgB...":"saved"
},
"thumb_image" : "default"
},
}
}
如果您要列出用户2ExF2vKltibqCbE0oVOEHkYSRi2
保存的所有图书,请使用此数据库参考:
String userId = "2ExF2vKltibqCbE0oVOEHkYSRi2";
DatabaseReference savedRef = FirebaseDatabase.getInstance()
.getReference().child("books").child(userId);