【问题标题】:Why can't this Android app cast text from Firebase into strings?为什么这个 Android 应用程序不能将 Firebase 中的文本转换为字符串?
【发布时间】:2015-11-12 05:00:38
【问题描述】:

我制作了一个简单的 Android 应用程序,它应该显示来自 Firebase 的文本。然而,我在将 Firebase 数据转换为字符串时遇到了问题。这是代码:

public class MainActivity extends AppCompatActivity {

  private Firebase ref;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Firebase.setAndroidContext(this);
    Firebase ref = new Firebase("xxx");
    final TextView textbox = (TextView) findViewById(R.id.textbox);
    Firebase.setAndroidContext(this);
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String newCon = (String) dataSnapshot.getValue();
            textbox.setText(newCon);
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });
  }
}

我收到以下错误:

E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.ClassCastException: java.util.HashMap cannot be cast to java.lang.String
at com.example.elish_000.myfirstapp.MainActivity$1.onDataChange(MainActivity.java:43)

运行应用程序时没有错误。然而,当我向 Firebase 添加文本时,应用程序崩溃而不是显示文本。

【问题讨论】:

  • 阅读错误信息了吗?

标签: java android firebase


【解决方案1】:

Firebase 默认返回 HashMap 来表示 JSON 对象。您可能正在该对象中寻找String 属性之一。

有两种方法可以解决这个问题。

1 - 使用HashMap 并提取密钥。

@Override
public void onDataChange(DataSnapshot dataSnapshot) {
   HashMap<String, Object> data = dataSnapshot.getValue();
   String newCon = data.get("newCon");
   textbox.setText(newCon);
}

2 - 创建一个类型安全的类,并将 Firebase 数据反序列化为对象。

@Override
public void onDataChange(DataSnapshot dataSnapshot) {
   MyClass theObject = snapshot.getValue(MyClass.class);
   textbox.setText(theObject.newCon);
}

我强烈推荐选项 2!

反序列化到一个类可能需要提前多一点。但是,它为类型安全和代码可读性带来了巨大的好处。

以下是一些使用 Firebase 检索数据的文档。 https://www.firebase.com/docs/android/guide/retrieving-data.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2015-03-18
    相关资源
    最近更新 更多