当前位置: 首页 > 面试题库 >

Firebase在发布模式下找不到与对象序列化的属性

贡烨烁
2023-03-14
问题内容

我编写了一种将实时位置数据推送到Firebase的方法:

private void writeNewMarker(int sessionType, String myUuid, String datetime, Location location) {
    locationToDB = new LocationFromAndroid();
    JSONObject jsonObjectCoords = new Coords(location.getLatitude() + "", location.getLongitude() + "", location.getAltitude() + "");
    locationToDB.setFinish("false");
    locationToDB.setLost("false");
    locationToDB.setCoords(jsonObjectCoords);
    locationToDB.setDistanceToGo("0");
    locationToDB.setHeading(location.getBearing() + "");
    locationToDB.setNauwkeurigheid(location.getAccuracy() + "");
    locationToDB.setSpeed(location.getSpeed() * 3.6 + "");
    locationToDB.setSpeed2(location.getSpeed() + "");
    locationToDB.setTimestamp(location.getTime() + "");
    locationToDB.setWp_user(myUuid);
    locationToDB.setSessionType(sessionType);
    locationToDB.setTitle(title);
    if(myUuid != null && datetime != null && locationToDB.getTitle() != null && !myUuid.isEmpty() && !datetime.isEmpty()) {
        databaseRef.child(myUuid + "-Android" + sessionType + datetime).setValue(locationToDB);

当我在调试模式下构建应用程序时,它可以很好地工作。但是,当我在发布模式下为Google Play构建它时,它在此行停止工作:

databaseRef.child(myUuid + "-Android" + sessionType + datetime).setValue(locationToDB);

更具体地说:当我这样做时,一切正常:

databaseRef.child(myUuid + "-Android" + sessionType + datetime).setValue("Test");

看起来好像传递了一个对象,因为签名的APK中不可能有值吗?

错误: com.google.firebase.database.DatabaseException异常:在类上找不到要序列化的属性


问题答案:

添加-keepclassmembers class com.yourcompany.models.** { *; }proguard-
rules.pro可以达到目的。

Proguard规则文档



 类似资料:
  • 问题内容: 我有这样的课: 我从Firebase添加数据。 当我以调试方式运行该应用程序时,没有问题。但是在发布后,应用程序崩溃并显示以下错误: 我有 minifyEnabled是 真的 问题答案: 为了解决这个问题,您的类需要实现Serializable接口: 您还需要添加带有三个参数的构造函数。您的课程应如下所示: 如果日期是,它将具有服务器生成的时间戳。因此,您无需为其设置值。另请参见用于标

  • 我无法创建Firebase数据库。 我正在尝试为一个类建模。一个非常简单的类: 这几乎就像是来自火基地的样本类。 从getUser()获取的应用程序用户已登录到Firebase。 当我调用SetValue时: 会引发致命的异常。 我已经检查了类型,所有的都被接受了。发生了什么?

  • Apache Ignite序列化/反序列化与字段反序列化的顺序有关。我需要在Ignite缓存中放置一个“b”实例,如下所示: 如果我运行以下代码: b1来自缓存映射值:null 问题是子字段在父字段之前被反序列化,因此当Ignite反序列化B时,它首先创建一个空的B对象(带有null“name”和“mapofb”),然后尝试反序列化mapofb。它创建Hashtable,然后反序列化它包含的每个对

  • 我的问题是,有什么方法可以让我序列化/反序列化一个名为onlinePlayers的列表,该列表引用了“John1”的实例,它也碰巧在List allPlayers中,而不重复“John1”,同时仍然引用那个对象? 我猜当我反序列化allPlayers时,它将创建不同于原始对象的对象,所以onlinePlayers在反序列化后不可能仍然引用相同的对象。我是否应该编写一个自定义方法,在反序列化后将新创

  • 问题内容: 有没有办法确定序列化Java对象的生成? 问题是我序列化了一个对象而没有明确指定。现在,反序列化过程抱怨类不兼容。但是,我并没有以使其不兼容的方式更改类。因此,我假设在类中指定足够了,因为它存储在对象数据中。为此,我需要从序列化数据中读取。 问题答案: 您可以通过扩展ObjectInputStream来做到这一点: 我相信可以通过替换方法返回的描述符来读取所有序列化的数据,但是我还没有

  • 我有一个类的数组列表,如下所示: 我想把这个列表写成Json,并尝试了以下代码: 并收到以下错误信息: 找不到类~~~~~的序列化程序,也找不到创建BeanSerializer的属性(为了避免异常,请禁用SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用链:java.util.ArrayList[0])` 我尝试添加但由于未知原因,它使所有Person对象