【问题标题】:What could be causing the failed bounce to type?什么可能导致失败的反弹键入?
【发布时间】:2015-11-14 06:42:06
【问题描述】:

我正在使用 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)

【问题讨论】:

  • 你想在这里做什么 -> 覆盖 public void onDataChange(DataSnapshot dataSnapshot) { String newCond = (String) data.get("condition");文本框.setText(newCond); fObject obj = dataSnapshot.getValue(fObject.class); //第 49 行 textbox.setText(obj.toString()); }
  • 为什么要设置两次 textBox 的值?
  • 你得到解决方案了吗?
  • @parag No. Log cat 给出了同样的错误
  • @ParagKadam 嘿,帕拉格,它有效。只是活动显示“DataSnapShot {key = condition, value = Steamed} 而不是只显示“Steam”。

标签: java android firebase


【解决方案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;
    }
}

【讨论】:

    【解决方案2】:

    Firebase 的 JSON 到 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?。你应该也读一下。

    【讨论】:

      猜你喜欢
      • 2017-05-11
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多