为什么这个 Android 应用不能将 Firebase 中的文本转换为字符串?
Why can't this Android app cast text from Firebase into strings?
我制作了一个简单的 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.onDataChange(MainActivity.java:43)
我运行应用程序时没有错误。然而,当我向 Firebase 添加文本时,应用程序崩溃而不是显示文本。
Firebase returns 默认情况下 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 - 创建类型安全的 class,并将 Firebase 数据反序列化为对象。
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
MyClass theObject = snapshot.getValue(MyClass.class);
textbox.setText(theObject.newCon);
}
我强烈推荐选项 2!
反序列化为 class 可能需要 多一点 前期。但是,它在类型安全和代码可读性方面带来了巨大的好处。
这里有一些使用 Firebase 检索数据的文档。
https://www.firebase.com/docs/android/guide/retrieving-data.html
我制作了一个简单的 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.onDataChange(MainActivity.java:43)
我运行应用程序时没有错误。然而,当我向 Firebase 添加文本时,应用程序崩溃而不是显示文本。
Firebase returns 默认情况下 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 - 创建类型安全的 class,并将 Firebase 数据反序列化为对象。
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
MyClass theObject = snapshot.getValue(MyClass.class);
textbox.setText(theObject.newCon);
}
我强烈推荐选项 2!
反序列化为 class 可能需要 多一点 前期。但是,它在类型安全和代码可读性方面带来了巨大的好处。
这里有一些使用 Firebase 检索数据的文档。 https://www.firebase.com/docs/android/guide/retrieving-data.html