public class Post {

    private String title;
    private String massage;

    public Post() {
    }

    public String getTitle() {
        return title;
    }

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

    public String getMassage() {
        return massage;
    }

    public void setMassage(String massage) {
        this.massage = massage;
    }
}

public class Posts extends AppCompatActivity {

    private DatabaseReference databaseReference, barRoomsCoordinates;
    private FirebaseDatabase firebaseDatabase;
    private List<Post> postList;
    private List<String> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_posts);

        postList = new ArrayList<>();
        list = new ArrayList<>();

        showAllMyPosts();


    }

    private void getPosts(List<String> posts) {

        for (int i = 0; i < posts.size(); i++) {
            databaseReference = firebaseDatabase.getReference().child("Posts").child(posts.get(i));
            databaseReference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    Post posts = dataSnapshot.getValue(Post.class);
                    Post post = new Post();

                    post.setTitle(posts.getTitle());
                    post.setMassage(posts.getMassage());
                    postList.add(post);



                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
    }

    private void showAllMyPosts() {
        FirebaseApp.initializeApp(Posts.this);

        Handler handler = new Handler();
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                barRoomsCoordinates = firebaseDatabase.getReference().child("Posts");
                barRoomsCoordinates.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        Iterator iterator = dataSnapshot.getChildren().iterator();
                        while (iterator.hasNext()) {
                            list.add(((DataSnapshot) iterator.next()).getKey());
                        }
                        getPosts(list);
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
            }
        };
        handler.post(runnable);
    }
}


这是我的数据库结构

Posts
 Post1
 message1:
"abc + something"
 title1:
"abc"
 Post2
 message2:
"def + something"
 title2:
"def"
 Post3
 message3:
"ghi + something"
 title3:
"ghi"


我得到重复的数组,不明白为什么
请帮我。
我也尝试删除一个引用并进行调用,但是这样就无法访问JSON的子级。

最佳答案

这是由于您的for loop而发生的。每次循环时,您都在创建一个新的databaseReference。将databaseReference移出循环,它将解决您的问题,或者尝试更改从Firebase数据库获取数据的逻辑。

希望能帮助到你。

07-24 17:24
查看更多