我正在使用Firebase,我正试图通过我的Android应用程序显示来自Firebase的数据。然而,当我运行应用程序时,它崩溃并且logcat说"未能反弹以键入"。我模仿了java类中JSON结构的属性。
以下是MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Firebase.setAndroidContext(this);
Firebase ref = new Firebase("https://fbandg.firebaseio.com/");
android.R.layout.simple_list_item_1, android.R.id.text1);
final TextView textbox = (TextView) findViewById(R.id.textbox);
Firebase.setAndroidContext(this);
ValueEventListener newCon = ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
fObject obj = dataSnapshot.getValue(fObject.class); //Line 49
textbox.setText(obj.toString());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
这是我创建的Java类:
public class fObject
{
String newCond;
public String getCondition()
{
return newCond;
}
}
产生的错误如下:
firebase.client.DataSnapshot.getValue(DataSnapshot.java:183)
com.example.elish_000.myfirstapp.MainActivity$1.onDataChange(MainActivity.java:49)
答案 0 :(得分:1)
Firebase的JSON-to-Java映射器使用JavaBean模式来确定如何映射字段。要使类成为有效的JavaBean,字段名称和getter / setter需要匹配。
要使您的课程有效,请将其更改为:
public class fObject
{
String newCond;
public String getNewCond()
{
return newCond;
}
}
然后,您可以使用以下内容从DataSnapshot
阅读
fObject obj = dataSnapshot.getValue(fObject.class);
前一段时间我已经广泛报道了这一点:Why do I get "Failed to bounce to type" when I turn JSON from Firebase into Java objects?。你也应该读一读。
答案 1 :(得分:1)
试试这个,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Firebase.setAndroidContext(this);
Firebase ref = new Firebase("https://fbandg.firebaseio.com");
final TextView textbox = (TextView) findViewById(R.id.textbox);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
fObject fobject = new fObject();
fobject.setNewCondition(dataSnapshot.child("condition").getValue().toString());
textbox.setText(fobject.getNewCondition());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
修改你的fObject类,
public class fObject
{
String newCond;
public String getNewCond()
{
return newCond;
}
public void setNewCond(String cond)
{
newCond = cond;
}
}