android exception 类型,android – database.DatabaseException:无法将java.lang.String类型的对象转换为类型...

我的问题

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 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 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”

Data Structure

我的抗议结构:

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 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

问题是什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,报错信息是"java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String",这个错误是由于在比较时,将java.util.Date类型java.lang.String类型进行了比较,导致类型不匹配的异常。解决这个问题的方法是将比较的两个对象类型统一为相同的类型。 解决方案如下: 1. 确保比较的两个对象类型相同,可以使用类型转换java.lang.String类型转换java.util.Date类型,或者将java.util.Date类型转换java.lang.String类型,以便进行比较。 2. 如果比较的两个对象分别是数据库中的日期字段和一个字符串,可以使用数据库的日期函数将字符串转换为日期类型,然后再进行比较。 3. 如果比较的两个对象分别是Java代码中的变量,可以使用SimpleDateFormat类将字符串解析为日期对象,或者将日期对象格式化为字符串,然后再进行比较。 下面是一个示例代码,演示了如何解决这个报错: ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateComparison { public static void main(String[] args) { String dateString = "2021-01-01"; Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date parsedDate = dateFormat.parse(dateString); // 将字符串解析为日期对象 if (date.compareTo(parsedDate) > 0) { System.out.println("Date is after parsedDate"); } else if (date.compareTo(parsedDate) < 0) { System.out.println("Date is before parsedDate"); } else { System.out.println("Date is equal to parsedDate"); } } catch (ParseException e) { e.printStackTrace(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值