Firebase DatabaseException问题无法将类型java.lang.Long的值转换为String

时间:2018-10-19 16:10:27

标签: java firebase firebase-realtime-database

我正在尝试获取值名称和电话,名称为=“ name”,电话=“ 123456”。我该如何解决?

我的数据库结构:用户/驱动程序(名称=“名称”,电话=“ 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类型的值转换为String

4 个答案:

答案 0 :(得分:0)

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

希望有帮助。

答案 1 :(得分:0)

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

而是像这样在Firebase数据库控制台中添加值:

phone="123456"

enter image description here

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

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

答案 2 :(得分:0)

正如我所看到的,在您的数据库中,您有一些按键的电话不是phone =“ 19485”,而是phone =3947。在那些没有“”的地方更改为“”。您可以从Firebase手动编辑它们

答案 3 :(得分:0)

您在骑手课上没有问题。您的问题与Firebase数据库中的子值类型有关

带有=>“”子串值的子值 如果没有“”,则为整数值

您的Constructor函数参数类型为String是,虽然不错,但您的Constructor函数参数类型与Firebase数据库子值类型相同。 我遇到了与您一样的问题,并解决了此问题=>将子值123456更改为“ 123456” 最后,您解决了这个问题