从firebase实时数据库中获取具有大数据的子节点

时间:2019-08-07 11:49:23

标签: android firebase firebase-realtime-database

我想使用addValueEventListener()获取节点的子代。当图书数据很少时,它可以正常工作,但是当图书数超过30000时,它会发出错误消息“ java.lang.RuntimeException:Firebase数据库遇到OutOfMemoryError。您可能需要减少同步到客户端的数据量(例如通过使用查询或同步更深的路径)。“

Firebase数据结构为

booksData
    123 (book id)
        bookname : ""
        writer   : ""
        price    : ""
        category : ""
        publicher : ""
        ...
    456 (book id)
        bookname : ""
        writer   : ""
        price    : ""
        category : ""
        publicher : ""
        ...
    .... and so on. having vast data

(仅出于示例更改数据结构和名称)

我在android中尝试过

userIDRef1.child("booksData").addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            Log.e(TAG, "in get booksData");

            ArrayList<BooksWrapper> booksList = new ArrayList<>();

            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {

                BooksWrapper vtw = postSnapshot.getValue(BooksWrapper.class);
                booksList.add(vtw);
            }

            userIDRef1.child("booksData").removeEventListener(this);
            Log.e(TAG, "daybooks data size is : "+booksList.size());
            if (booksList.size() >0){
                db.addBookData(booksList);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {
            // Failed to read value
            Log.e(TAG, "Failed to read app title value.", error.toException());
        }
    });

有什么方法可以获取数据,首先是1000本,然后是1000本,依此类推...?任何解决方案请...

0 个答案:

没有答案