java - Firebase android中的DatabaseException
问题描述
我是Android应用程序开发的新手。我正在尝试从 Firebase 检索数据,但我无法将转换字符串键入用户定义的对象。首先,它给了我ClasscastException,它无法将字符串转换为用户定义的对象。
这是我的代码:
MainActivity.java
public class MainActivity3 extends AppCompatActivity implements View.OnClickListener {
FirebaseDatabase db = FirebaseDatabase.getInstance();
DatabaseReference databasereference;
ListView l1;
List<User> names;
ArrayAdapter<User>arrayAdapter;
Button b;
User u = new User();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
l1 = findViewById(R.id.listvw);
b = findViewById(R.id.list_button);
b.setOnClickListener(this);
}
public void onClick(View view)
{
retrieve_data();
}
public void retrieve_data()
{
databasereference = db.getReference("User");
names = new ArrayList<>();
arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, names);
databasereference.addValueEventListener(new ValueEventListener() {
// User u1,u2;
// String s1,s2;
public void onDataChange(DataSnapshot datasnapshot) {
try {
names.clear();
for (DataSnapshot ds : datasnapshot.getChildren()) {
User u1=(User) ds.child("name").getValue(User.class);
User u2 =(User) ds.child("contact").getValue(User.class);
names.add(u1);
names.add(u2);
}
l1.setAdapter(arrayAdapter);
} catch (Exception e) {
// Toast.makeText(this,"failed",Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
用户.java
public class User
{
String name;
String contact;
String id;
String tmp;
public User() {
}
public User(String name,String contact,String id) {
this.name = name;
this.contact = contact;
this.id = id;
}
public User(String tmp)
{
this.tmp=tmp;
}
public User(String name,String id) {
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = contact;
}
}
异常详情:
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.firebase_smpl.User
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(CustomClassMapper.java:436)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(CustomClassMapper.java:232)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(CustomClassMapper.java:80)
at com.google.firebase.database.DataSnapshot.getValue(DataSnapshot.java:203)
at com.example.firebase_smpl.MainActivity3$1.onDataChange(MainActivity3.java:118)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5628)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:853)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:737)
有人,请帮助我。我被困在这里。
注意: 我更改了这一行: User u1=(User) ds.child("name").getValue(User.class); 到这一行: User u1=ds.getValue(User.class); 根据建议,但它给了我上述错误:
解决方案
它应该像...
公共类用户实现可序列化
用户用户 = ds.getValue(User.class); // ds 将是您的任何数据快照节点
推荐阅读
- java - Arraylist 检查 CustomerID 是否在 Rent ArrayList
- c++ - 声明一个原子迭代器
- laravel - laravel - 实现遗留 API 调用,包括?参数
- javascript - 制作 1 和 0 的所有组合。代码在 java 中运行良好,但在 js 中运行良好
- semantic-versioning - 如何组合语义版本?
- c# - 如何在 c# 中读取与父节点同名的 xml 节点子节点
- asp.net-core - 通过应用程序设置在 ASP.NET Core Azure Web 应用程序的 web.config 中设置 requestTimeout
- apache-kafka - KafkaConsumerAPI - 通过 vagrant 从 eclipse 连接到在 vm 中运行的代理
- linux - Elasticlogsearch 和 Kibana 仪表板的 Powershell 结果
- uml - 使用 UML 类表示法的实体关系图的可见性