我使用Firebase存储我在Android中制作的应用的信息。
目前,我具有能够从Firebase检索对象并填充这些对象的listView的功能。但是当我下订单时,我正在制作这些对象的ArrayList并以这种方式保存它。因此,当我尝试检索并显示订单时,我收到一条错误消息,指出无法将ArrayList转换为Object类型。
这里是检索和显示的代码:
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
Object object = ds.getValue(Object.class);
orders.add(object);
list.setAdapter(adapter);
}
}
所以这里我们的订单是一个ArrayList,而object是我的Object类的一个实例。我在应用程序的另一个区域中有这个代码工作正常,当它检索我的数据库中的所有项目并填充我的源,但这些项目作为单独的项目存储在数据库中而不是作为数组存储项目。
如何从我的数据库中检索ArrayList,然后访问该ArrayList中的特定项?如果您喜欢应用程序的任何其他区域的代码,请询问,我将编辑/更新我的问题以包含该代码。感谢
答案 0 :(得分:1)
示例POJO:
public class BookList {
private String bookName; // Add fields according to your needs \\
public BookList(){
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
}
获取图书详细信息的方法:
private void fetchBookList() {
progressDialog();
//---Your Reference to the bookList---\\
DatabaseReference dbRefQuoteRequestList = firebaseDatabase.getReference("All_Orders").child("Anthony Hopkins")
.child("orders").child("bookList");
dbRefQuoteRequestList.addValueEventListener(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(final com.google.firebase.database.DataSnapshot dataSnapshot) {
quoteRequestListArrayList.clear(); // ArrayList<Pojo/Object> \\
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
String bookName = postSnapshot.child("bookName").getValue(String.class);
//Use the dataType you are using and also use the reference of those childs inside arrays\\
// Putting Data into Getter Setter \\
BookList bookList = new BookList();
bookList.setbookName(bookName);
quoteRequestListArrayList.add(bookList);
}
if (quoteRequestListArrayList.size() == 0) {
StaticMethods.customSnackBar(quoteRequestLv, "Your alert!",
getResources().getColor(R.color.colorPrimaryDark),
getResources().getColor(R.color.color_white), 3000);
}
//---Initialize your adapter as you have fetched the data---\\
quoteRequestListAdapter = new QuoteRequestListAdapter(QuoteRequestListActivity.this, quoteRequestListArrayList);
quoteRequestLv.setAdapter(quoteRequestListAdapter);
dismissDialog();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
根据您的需要更改名称,希望它有所帮助。