所以我在Firebase中有一个非常简单的数组:
我希望能够在textview中显示这些消息,并在向阵列添加新消息时添加到textview。我显示消息的代码如下所示:
myFirebaseRef.child("messages").child("message").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
GenericTypeIndicator<List<String>> t = new GenericTypeIndicator<List<String>>() {};
List<String> messages = snapshot.getValue(t);
if( messages == null ) {
System.out.println("No Messages");
}
else {
for(int i = 0; i < messages.size(); i++) {
messageDisplay.setText(messageDisplay.getText() + "\n" + messages.get(i) + "\n");
}
}
}
这没有按预期工作,我得到一个&#34;未能反弹到键入&#34; GenericTypeIndicator上的异常。知道我哪里错了吗?
答案 0 :(得分:1)
看起来像是一个数组,看起来像一个关联数组到Firebase。差异很微妙但很重要,因为这意味着您无法将JSON反序列化为List<String>
。相反,如果应该是Map<String,String>
。
但是以下方法更简单,更好:
public void onDataChange(DataSnapshot snapshot) {
if (snapshot.getChildrenCount() == 0) {
System.out.println("No Messages");
}
else {
for (DataSnapshot messageSnapshot: snapshot.getChildren()) {
String message = messageSnapshot.getValue(String.class);
messageDisplay.setText(messageDisplay.getText() + "\n" + message + "\n");
}
}
}