簡體   English   中英

從Firebase數據庫填充列表視圖

[英]Populate a listview from Firebase 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數據庫獲取數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM