Как я могу получить все данные FirebaseRecylerAdapter android студия в реальном времени базы данных - PullRequest
0 голосов
/ 15 марта 2020

Я использую базу данных Firebase Realtime с Android Studio. Код java. Я использую базу данных в реальном времени. Я пытаюсь привести все сообщения людей, на которых подписан пользователь. но я не могу принести все сообщения. Приходят только последние сообщения, отправленные пользователями

У меня есть эта база данных:

enter image description here

enter image description here

Почтовый класс:

public class Post {

    private String title , content  , currentUserID , date , time , fullname , nickname , timestamp ;

    public Post() {

    }


    public Post(String title, String content, String currentUserID , String date , String time , String fullname , String nickname , String timestamp ) {
        this.title = title;
        this.content = content;
        this.currentUserID = currentUserID;
        this.date = date ;
        this.time = time ;
        this.fullname = fullname ;
        this.nickname = nickname ;
        this.timestamp = timestamp ;

    }



    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getCurrentUserID() {
        return currentUserID;
    }

    public void setCurrentUserID(String currentUserID) {
        this.currentUserID = currentUserID;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getFullname() {
        return fullname;
    }

    public void setFullname(String fullname) {
        this.fullname = fullname;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }


У меня есть ссылка на базу данных als:

RecyclerView recyclerView;
DatabaseReference profileUserRef , Followers   ;
FirebaseDatabase firebaseDatabase ;
FirebaseRecyclerOptions<Post> options ;
FirebaseRecyclerAdapter<Post,MyRecyclerViewHolder> adapter ;
FirebaseAuth mAuth ;
String  currentUserID;
Post post ;

 mAuth = FirebaseAuth.getInstance();
 currentUserID = mAuth.getCurrentUser().getUid();
 firebaseDatabase = FirebaseDatabase.getInstance();
 Followers = FirebaseDatabase.getInstance().getReference().child("Follow");
 recyclerView = homefragment.findViewById(R.id.recycler_view);
 recyclerView.setHasFixedSize(true);
 linearLayoutManager = new LinearLayoutManager(getContext());
 linearLayoutManager.setReverseLayout(true);
 linearLayoutManager.setStackFromEnd(true);
 recyclerView.setLayoutManager(linearLayoutManager);
 profileUserRef = FirebaseDatabase.getInstance().getReference().child("Users");


мой код:

public void getPost() {

        options =
                new FirebaseRecyclerOptions.Builder<Post>()
                        .setQuery(Followers.child(currentUserID), Post.class)
                        .build();

        adapter =
                new FirebaseRecyclerAdapter<Post, MyRecyclerViewHolder>(options) {
                    @Override
                    protected void onBindViewHolder(@NonNull final MyRecyclerViewHolder holder, final int position, @NonNull final Post model ) {
                        list_user_id = getRef(position).getKey();
                        final String PostKey = getRef(position).getKey();


                        DatabaseReference getTypeRef = getRef(position).child("request_type").getRef();

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

                                if (dataSnapshot.exists()){
                                   String type = dataSnapshot.getValue().toString();
                                     if (type.equals("follow")){

                                         profileUserRef.child(PostKey).child("Post").orderByChild("timestamp").addValueEventListener(new ValueEventListener() {
                                             @Override
                                             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                                 if (dataSnapshot.exists()){

                                                     for (final DataSnapshot snapshot : dataSnapshot.getChildren()){
                                                         post = snapshot.getValue(Post.class);


                                                             holder.txt_title.setText(post.getTitle());

                                                             holder.txt_comment.setText(post.getContent());

                                                             holder.txtpostname.setText(post.getFullname());

                                                     }


                                                 }

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

                                             }
                                         });

                                     }
                                }

                            }

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

                            }
                        });


                    }

                    @NonNull
                    @Override
                    public MyRecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
                        View itemView = LayoutInflater.from(getContext()).inflate(R.layout.post_item,viewGroup,false);
                        return new MyRecyclerViewHolder(itemView);

                    }

                };

        adapter.startListening();
        recyclerView.setAdapter(adapter);


    }

Как я могу получить все сообщения пользователей, на которых я подписан?

1 Ответ

0 голосов
/ 15 марта 2020

Вы должны определить Arraylist вашего класса Post; например:

var latlnginfo = ArrayList<Post>()

Затем вы добавляете данные в Arraylist следующим образом:

 database.addValueEventListener(object : ValueEventListener {
        override fun onCancelled(p0: DatabaseError) {
        }

        override fun onDataChange(p0: DataSnapshot) {
            if (p0.exists()) {
                latlnginfo.clear()
                for (h in p0.children) {
                    latlnginfo.add(h.getValue(Post::class.java)!!)
                }}}}

Я думаю, что проблема вашего кода в том, что вы не добавляете данные в массив, а вы просто показать последний элемент.

...