【问题标题】:Firebase DatabaseException Issue Failed to convert value of type java.lang.Long to StringFirebase DatabaseException 问题无法将 java.lang.Long 类型的值转换为字符串
【发布时间】:2019-06-15 05:15:15
【问题描述】:

我正在尝试将值 name 和 phone 作为 name ="name", phone="123456"。我该如何解决?

我的数据库结构:用户/驱动程序 (name="Name", phone="123456")

我的骑手班:

public class Rider {
private  String name,email,password,phone;

public Rider(){}

public Rider(String name, String phone){

     this.name=name;
     this.phone=phone;
}


public String getName() {
    return name;
}

public String getPhone() {
    return phone;
}


public void setName(String name){

    this.name=name;

}

public void setPhone(String phone){

    this.phone=phone;

}

我的活动课:

  public void onKeyEntered(String key, GeoLocation location) {
            FirebaseDatabase.getInstance().getReference("Users").child("Drivers")
                    .child(key).addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    Rider rider=dataSnapshot.getValue(Rider.class);

                    mMap.addMarker(new MarkerOptions()
                            .position(new LatLng(mLastLocation.getLatitude(),mLastLocation.getLongitude()))
                            .flat(true)
                            .title(rider.getName())
                            .snippet("phone:"+rider.getPhone())
                            .icon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_car_background)));
                }

错误:com.google.firebase.database.DatabaseException:无法将 java.lang.Long 类型的值转换为字符串

【问题讨论】:

  • 您确定您的数据库中的phone 是一个字符串而不是一个数字吗?在控制台中,是否有引号?
  • 我的手机值为“123456”,姓名值为“迈克尔”。
  • 你能贴一张你的数据库的照片吗?谢谢
  • 是的,所以,您有一个电话字符串值,但您正试图将其强制输入数字字段。你不能这样做 - 类型必须匹配。
  • 确保类型匹配。如果您的数据对象需要一个字符串,请确保您在数据库中有一个字符串。如果您的数据对象需要 Long,请确保您在数据库中有一个数字。

标签: java firebase firebase-realtime-database


【解决方案1】:

似乎在FirebaseDatabase 中存储为Long 值。您可以检查并替换数据库中的这些值,或者您可以在模型类中创建另一个设置器来接受Long 值。然后,您可以使用String.valueOf() 方法将值存储在私有字段中。

希望对你有帮助。

【讨论】:

  • 不,FirebaseDatabase 存储为字符串值。因为我的名字值是“Juanje”,而不是 Juanje
【解决方案2】:

我认为问题在于您没有在 Firebase DB 中的“”之间添加您的电话号码。这意味着 Firebase 会将该值视为 Long,并且根据您提供的代码,您希望它是 String。

而是像这样在 Firebase DB 控制台中添加值:

phone="123456"

在我的图片中,我希望数字是整数或长整数。

如果您想更改 Firebase 控制台中的值,只需单击该值并开始编辑。

【讨论】:

  • 那么,如何更改名称值,例如 phone=123456 ?我无法改变。
  • @MichaelSouza 您能否发布您的 Firebase 控制台数据库的打印屏幕,以便我们了解您是如何在其中定义值的?
  • @MichaelSouza 问题正是我认为的问题...您在数据库中有一个数字,因为该数字不在引号 ("") 之间,并且在 Java 代码中您有电话号码定义为字符串
【解决方案3】:

正如我所见,在您的数据库中,您的某些键中的 phone 不是 phone = "19485" 而是 phone = 3947。在那些没有 " " 的地方更改为 " " 。您可以从 Firebase 手动编辑它们

【讨论】:

  • 我作为司机有 350 条记录。我无法为所有这些手动更改值。
  • 有些值不强,但它们首先被添加为 longs,您应该执行某种循环将所有这些更改为字符串,无论哪种方式,当您解析它们时,您正在解析 ponga一个字符串模型,这就是你得到错误的地方
  • 您的错误来自 Firebase,而不是来自您的代码
【解决方案4】:

您对骑手课程没有任何问题。您的问题与 Firebase 数据库中的子值类型有关

带有 => "" 的子值是它的字符串值 如果没有 "" ,它的整数值

您的构造函数参数类型 String 是的,但您的构造函数参数类型相同的 Firebase 数据库子值类型。 我有像你这样的问题,我解决了这个问题 => 将子值 123456 更改为“123456” 终于解决了这个问题

【讨论】:

    猜你喜欢
    • 2017-01-25
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 2018-05-22
    相关资源
    最近更新 更多