什么可能导致失败的弹跳键入?

时间:2015-11-14 06:42:06

标签: java android firebase

我正在使用Firebase,我正试图通过我的Android应用程序显示来自Firebase的数据。然而,当我运行应用程序时,它崩溃并且logcat说"未能反弹以键入"。我模仿了java类中JSON结构的属性。

limited subset

以下是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)

2 个答案:

答案 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;
    }
}