java - 从 Firebase 数据库填充 ListView

标签 java android firebase firebase-realtime-database

我正在尝试从 Firebase 数据库向我的 Android 应用程序填充 ListView。我正在使用(以及我的图像的后续存储)。我将记录放入数据库没有问题,但取回信息并填充我的 ListView 被证明是棘手的。这是我的代码:

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_adminfeed);

    DatabaseReference databaseRef = FirebaseDatabase.getInstance().getReferenceFromUrl("https://bookstore-30213.firebaseio.com/All_Books");

    final ArrayAdapter<String> myArrayAdapter = new ArrayAdapter<String>(this, R.layout.listview_layout);

    list = (ListView) findViewById(R.id.listView);
    adapter = new CustomListAdapter(AdminFeed.this, bookModelList);
    list.setAdapter(adapter);
    }
        public void onResponse(JSONObject response) {
            try {
                JSONArray jsonArray = response.getJSONArray("All_Books");

                for (int i = 0; i < jsonArray.length(); i++) {

                    JSONObject book = jsonArray.getJSONObject(i); //something goes wrong here, i think its possibly with the size of the reading
                    Book newBook = new Book();
                    newBook.setTitle(book.getJSONObject("title").getString("title"));
                    newBook.setImageURL(book.getString("imageURL"));
                    newBook.setAuthor(book.getJSONObject("author").getString("author"));

                    // adding event to events array
                    bookModelList.add(newBook);

                }

            } catch (JSONException e) {
                e.printStackTrace();
            }
            adapter.notifyDataSetChanged();
    }

它返回我的“bookModelList”是空的,但我不知道为什么,因为我清楚地向其中添加了一本书。关于我哪里出错的任何指示?

最佳答案

要解决这个问题,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference allBooksRef = rootRef.child("All_Books");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<Book> bookModelList = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Book book = ds.getValue(Book.class);
            bookModelList.add(book);
        }
        ListView list = (ListView) findViewById(R.id.listView);
        CustomListAdapter adapter = new CustomListAdapter(AdminFeed.this, bookModelList);
        list.setAdapter(adapter);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
allBooksRef.addListenerForSingleValueEvent(valueEventListener);

请注意,无需使用 JSONObject 即可从 Firebase 数据库获取数据。

关于java - 从 Firebase 数据库填充 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49497365/

相关文章:

android - 带有 Android 的 Facebook SDK,获取代码而不是访问 token

android - 当点击推送通知时,当应用程序关闭时,如何打开由 Firebase 发送的 url?

javascript - Firebase:手动删除一条路径时如何更新数组长度?

firebase - Firestore 规则 : How do I allow access to a subcollection depending on a field of the document that contains it?

java - Gradle 编译兼容性异常,payU

java - 在 Java 中处理/记录多个音频输入流

java - 由于授权无法访问 S3 预签名 URL

java - 如何设置Java NIO AsynchronousSocketChannel连接超时

android - 更改布局以使用 ImageView 或 2 个 ImageView

javascript - VueJS - 变量已定义但从未使用过(将数据发送到 Firebase)