android – database.DatabaseException:无法将java.lang.String类型的对象转换为类型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了android – database.DatabaseException:无法将java.lang.String类型的对象转换为类型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5522字,纯文字阅读大概需要8分钟。
内容图文
![android – database.DatabaseException:无法将java.lang.String类型的对象转换为类型](/upload/InfoBanner/zyjiaocheng/759/dc9767f2df794e95b50f385275c80c33.jpg)
我的问题
08-10 04:23:28.820 21501-21501/my.org.medicare.medicareapp E/AndroidRuntime: FATAL EXCEPTION: main Process: my.org.medicare.medicareapp, PID: 21501 com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type my.org.medicare.medicareapp.protest
at com.google.android.gms.internal.zzaln.zzd(Unknown Source)
at com.google.android.gms.internal.zzaln.zzb(Unknown Source)
at com.google.android.gms.internal.zzaln.zza(Unknown Source)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
at my.org.medicare.medicareapp.FirebaseHelper.fetchData(FirebaseHelper.java:50)
at my.org.medicare.medicareapp.FirebaseHelper.access$000(FirebaseHelper.java:14) atmy.org.medicare.medicareapp.FirebaseHelper$1.onChildAdded(FirebaseHelper.java60)at com.google.android.gms.internal.zzahe.zza(Unknown Source) at com.google.android.gms.internal.zzaje.zzcta(Unknown Source) at com.google.android.gms.internal.zzajh$1.run(Unknown Source)
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:5417)
at java.lang.reflect.Method.invoke(Native Method)
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我的主要活动代码:
rv = (RecyclerView) findViewById(R.id.rv);
rv.setLayoutManager(new LinearLayoutManager(this));
//INITIALIZE FIREBASE DB
db = FirebaseDatabase.getInstance().getReference().child("Pro");;
helper = new FirebaseHelper(db);
//ADAPTER
adapter = new MyAdapter(this, helper.retrieve());
rv.setAdapter(adapter);
还有我的FirebaseHelper:
public class FirebaseHelper {
DatabaseReference db;
Boolean saved=null;
ArrayList<protest> spacecrafts=new ArrayList<>();
public FirebaseHelper(DatabaseReference db) {
this.db = db;
}
//WRITE IF NOT NULL
public Boolean save(protest spacecraft)
{
if(spacecraft==null)
{
saved=false;
}else
{
try
{
db.child("Pro").push().setValue(spacecraft);
saved=true;
}catch (DatabaseException e)
{
e.printStackTrace();
saved=false;
}
}
return saved;
}
//IMPLEMENT FETCH DATA AND FILL ARRAYLIST
private void fetchData(DataSnapshot dataSnapshot)
{
spacecrafts.clear();
//dataSnapshot.getChildren()
for (DataSnapshot ds : dataSnapshot.getChildren())
{
protest spacecraft=ds.getValue(protest.class);
spacecrafts.add(spacecraft);
}
}
//READ THEN RETURN ARRAYLIST
public ArrayList<protest> retrieve() {
db.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
fetchData(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
fetchData(dataSnapshot);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return spacecrafts;
}
}
我认为持有人
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView nameTxt,propTxt,descTxt;
ItemClickListener itemClickListener;
public MyViewHolder(View itemView) {
super(itemView);
nameTxt= (TextView) itemView.findViewById(R.id.nameTxt);
propTxt= (TextView) itemView.findViewById(R.id.propellantTxt);
descTxt= (TextView) itemView.findViewById(R.id.descTxt);
itemView.setOnClickListener(this);
}
public void setItemClickListener(ItemClickListener itemClickListener)
{
this.itemClickListener=itemClickListener;
}
@Override
public void onClick(View view) {
this.itemClickListener.onItemClick(this.getLayoutPosition());
}
下面是我的数据结构,我试着读“Pro”
我的抗议结构:
public class protest {
private String name;
private String contact;
private String centre;
public protest(){};
public String getName(){return name;}
public String getContact(){return contact;}
public String getCentre(){return centre;}
public void setName(String name) {
this.name = name;
}
public void setContact(String contact) {
this.contact = contact;
}
public void setCentre(String centre) {
this.centre = centre;
}
}
我可以知道这是什么问题吗?我是firebase的新手,我需要你的帮助.我在这里读了一些类似的问题,但我仍然无法解决我的问题.这里有专家可以帮助我吗?
更新:
用打印再次测试..
当Datasnapshot转到
public ArrayList<protest> retrieve() {
db.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
System.out.println(dataSnapshot.getValue());
fetchData(dataSnapshot);
}
08-10 06:26:47.548 26700-26700 / my.org.medicare.medicareapp I / System.out: {name = lee,contact = 123456,center = jalan ipoh}
但是当Datasnapshot去的时候
private void fetchData(DataSnapshot dataSnapshot)
{
spacecrafts.clear();
//dataSnapshot.getChildren()
for (DataSnapshot ds : dataSnapshot.getChildren())
{
System.out.println(ds.getValue());
protest spacecraft=ds.getValue(protest.class);
spacecrafts.add(spacecraft);
}
}
08-10 06:26:47.548 26700-26700 / my.org.medicare.medicareapp I / System.out:jalan ipoh
问题是什么?
解决方法:
您的fetchData函数已经将DataSnapshot作为子节点接收,但即使在这里,您仍然会遍历子节点,这些子节点将有效地循环通过各个键(名称,联系人,中心).
你应该简单地在DataSnaphot上调用getValue而不需要循环:
private void fetchData(DataSnapshot dataSnapshot)
{
spacecrafts.clear();
protest spacecraft=dataSnapshot.getValue(protest.class);
spacecrafts.add(spacecraft);
}
我希望这有帮助.
内容总结
以上是互联网集市为您收集整理的android – database.DatabaseException:无法将java.lang.String类型的对象转换为类型全部内容,希望文章能够帮你解决android – database.DatabaseException:无法将java.lang.String类型的对象转换为类型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。