Jun*_*rsi 25 android arraylist firebase firebase-realtime-database
我无法从Firebase中检索列表.我可以毫无困难地存储它,但是当我尝试将dataSnapshot.getValue()强制转换为ArrayList时,我的应用程序崩溃了,给出了异常:
HashMap无法转换为ArrayList
但是当我试图将它转换为HashMap时,它也会崩溃,给出异常:
ArrayList无法转换为hashmap
需要帮助!以下是创建问题的代码:
Fire.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<TaskDes> td = (ArrayList<TaskDes>) dataSnapshot.getValue()
notifyDataSetChanged();
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
Run Code Online (Sandbox Code Playgroud)

我想将Firebase中的所有数据检索为一个列表.TaskDes类包含三个字段:
class TaskDes { // definition
boolean done
String taskDescription
String taskTitle
}
Run Code Online (Sandbox Code Playgroud)
小智 42
您需要创建一个GenericTypeIndicator对象作为DataSnapshot.getValue()参数传递.
码:
GenericTypeIndicator<List<String>> t = new GenericTypeIndicator<List<String>>() {};
List<String> yourStringArray = dataSnapshot.getValue(t);
Run Code Online (Sandbox Code Playgroud)
你的模特
public class TaskDes {
private boolean done;
private String taskDescription;
private String taskTitle;
public TaskDes() {
}
public boolean isDone() {
return done;
}
public void setDone(boolean done) {
this.done = done;
}
public String getTaskDescription() {
return taskDescription;
}
public void setTaskDescription(String taskDescription) {
this.taskDescription = taskDescription;
}
public String getTaskTitle() {
return taskTitle;
}
public void setTaskTitle(String taskTitle) {
this.taskTitle = taskTitle;
}
}
Run Code Online (Sandbox Code Playgroud)
您需要创建一个GenericTypeIndicator对象作为DataSnapshot.getValue()参数传递.
在活动中
private static final String TAG=MainActivity.class.getSimpleName();
private FirebaseDatabase database;
private DatabaseReference myRef=null;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
database=FirebaseDatabase.getInstance();
myRef=database.getReference("ADD_YOUR_REFERECE");
myRef.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
/* This method is called once with the initial value and again whenever data at this location is updated.*/
long value=dataSnapshot.getChildrenCount();
Log.d(TAG,"no of children: "+value);
GenericTypeIndicator<List<TaskDes>> genericTypeIndicator =new GenericTypeIndicator<List<TaskDes>>(){};
List<TaskDes> taskDesList=dataSnapshot.getValue(genericTypeIndicator);
for(int i=0;i<taskDesList.size();i++){
Toast.makeText(MainActivity.this,"TaskTitle = "+taskDesList.get(i).getTaskTitle(),Toast.LENGTH_LONG).show();
}
}
@Override
public void onCancelled(DatabaseError error){
// Failed to read value
Log.w(TAG,"Failed to read value.",error.toException());
}
});
}
Run Code Online (Sandbox Code Playgroud)