我试图在"模板下获取每个节点的值。"
例如," eght" (只是随机测试名称),包含ArrayLists的ArrayList。所以,ArrayList< .ArrayList>。
我只需要获取一次值,因此我使用单个事件监听器:
mTemplateRef.addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot templateSnapshot : dataSnapshot.getChildren()){
// I've tried a million different things here, but all result in the error
// This is the error line
MapFoo mapFoo = templateSnapshot.getValue(MapFoo.class);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "getUser:onCancelled", databaseError.toException());
// ...
}
});
我总是最终得到这个:
Can't convert object of type java.util.ArrayList to type com.appname.template_editor.MapFoo
最后一部分是我尝试的任何对象。
这里是MapFoo:
顺便说一下,我使用Map,因为在调试时,节点似乎是HashMap形式。我还尝试了一个具有相同错误的HashMap对象。我还尝试了其他一些对象试图让它工作但没有成功。
public class MapFoo {
public Map<String, ArrayList> mapList;
public MapFoo(){
}
public Map getMapList(){
return mapList;
}
public MapFoo(Map<String, ArrayList> mapList){
this.mapList = mapList;
}
}
我尝试的另一种变体:
public class MasterListTemplateClass {
public String templateName;
public ArrayList<ArrayList> arrayList;
public MasterListTemplateClass() {
}
public MasterListTemplateClass(String templateName, ArrayList<ArrayList> arrayList) {
this.templateName = templateName;
this.arrayList = arrayList;
}
public String getName() {
return templateName;
}
public ArrayList<ArrayList> getList() {
return arrayList;
}
}
我无法解决任何问题。我只需要数据库中的值!
答案 0 :(得分:2)
而不是像0,1,2这样的数字ID给它们一个名称,以便能够塑造你的模型 因为我不确定是否可以制作带有数字名称的模型。
e.g。将0,1,2分别命名为days,title,dimen并创建以下模型
public class MyModel{
public String days;
public String title;
public String dimen;
public MyModel(){
}
public String getDays(){
return this.days;
}
public String getTitle(){
return this.title;
}
public String getDimen(){
return this.dimen;
}
}
然后通过调用2 snapshot.getChildren()
通过2个循环到达此模型 for(DataSnapshot templateSnapshot : dataSnapshot.getChildren()){
for(DataSnapshot snap : templateSnapshot.getChildren()){
MyModel model = snap.getValue(MyModel.class);
}
}
...
答案 1 :(得分:1)
记得这篇文章。找到了答案。当你在Firebase中使用地图时,如果你有一个int作为字符串(1对比“1”),Firebase会将其作为int读取。是否将其作为字符串输入。所以我所做的就是在数字(“1_key”)中添加“_key”,这迫使Firebase将其作为字符串读取而不是int。这固定了事情