我刚刚进入了Firebase和android的世界。我遵循在线教程来设置和获取非嵌套数据,并将其显示在列表视图中,如下所示:
之前的数据:
mListView = (ListView) findViewById(R.id.ListView) ;
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mStudents);
mListView.setAdapter(arrayAdapter);
FirebaseDatabase database = FirebaseDatabase.getInstance();
myRef = database.getReference().child("Student1");
myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String value = dataSnapshot.getValue(String.class);
String key = dataSnapshot.getKey();
String totl = key + ": " + value;
mStudents.add(totl);
arrayAdapter.notifyDataSetChanged();
}
});
Run Code Online (Sandbox Code Playgroud)
我向数据库添加了带有子字段的成绩字段。我想显示整个学生1数据以及成绩。当我尝试运行上面的代码时。我收到以下错误。
数据后:
FATAL EXCEPTION: main
Process: com.adcpnmd.mystudents, PID: 3524
com.google.firebase.database.DatabaseException: Failed to convert value of type java.util.HashMap to String
at com.google.android.gms.internal.zzbqi.zzaD(Unknown Source)
at com.google.android.gms.internal.zzbqi.zzb(Unknown Source) …Run Code Online (Sandbox Code Playgroud) 所以我将文件解析为python列表,我遇到了这样的嵌套列表:
{ 1 4{ 2a 0.0 }{ 3 0.0 }{ 4c 0.0 }{ 5 0.0 } }
Run Code Online (Sandbox Code Playgroud)
我想把它解释为一个列表,但是嵌套了,所以我希望它成为python列表,如下所示:
[1,4,[2a,0.0],[3,0.0],[4c,0.0],[5,0.0]]
Run Code Online (Sandbox Code Playgroud)
我设法使用以下内容执行正确的字符串:
l = """{ 1 4{ 2 0.0 }{ 3 0.0 }{ 4 0.0 }{ 5 0.0 } }"""
l = l.replace("{\t",",[").replace("\t}","]").replace("{","[").replace("}","]").replace("\t",",")[1:]
Run Code Online (Sandbox Code Playgroud)
我也可以申请' l.strip("\t")以便它是一个列表,但不适用于嵌套,否则它将被展平,这是我不想要的.
我尝试过ast.literal_eval(l),但它在字符串上失败,例如2a