【问题标题】:Hashmap object saved in Cloud Firestore with field names as letters insted of informed namesHashmap 对象保存在 Cloud Firestore 中,字段名称为字母而不是通知名称
【发布时间】:2019-08-27 15:07:44
【问题描述】:

我正在使用 Kotlin 编写一个 Android 应用程序,但在将文档添加到 Cloud Firestore 时遇到了问题。 在 android studio AVD Emulator 中测试应用程序时,它运行良好并按预期保存,但是当我从手机测试时,在测试模式下从 Google Play 商店安装应用程序时,它会将地图的字段名称更改为字母。

我正在 kotlin 中创建一个 hashMap,如下所示:

            val mapeamento: HashMap<String, Any?>  = hashMapOf(
                "user_id" to userId,
                "data" to data,
                "hora" to hora,
                "local" to mapLocais,
                "sinal" to mapSinais,
                "companhia" to mapCompanhias,
                "contexto" to contexto,
                "soma" to mapSoma,
                "energossoma" to mapEnergossoma,
                "psicossoma" to mapPsicossoma,
                "mentalsoma" to mentalsoma,
                "hipotese" to mapHipotese,
                "informacoes" to mapInformacoes,
                "sincronicidades" to mapSincronicidades,
                "categoria" to mapCategoria,
                "hipotese_comprovada" to hipoteseComprovada,
                "explicacao_comprovacao" to explicacaoComprovacao
            )

并以这种方式添加到 Cloud Firestore:

                dbMapeamentoUser.add(mapeamento)
                    .addOnSuccessListener { documentReference ->
                        Log.d(TAG, "Mapeamento DocumentSnapshot added with ID: ${documentReference.id}")
                        Toast.makeText(this@CadastroMapeamentoActivity, "Mapeamento adicionado!", Toast.LENGTH_LONG).show()
                        dbMapeamentoUser.addSnapshotListener { documentSnapshot, firebaseFirestoreException ->
                            // do nothing, just to make sure server will update local cache
                        }
                        finish()
                    }
                    .addOnFailureListener { e ->
                        Log.w(TAG, "Error adding Mapeamento document", e)
                        Toast.makeText(this@CadastroMapeamentoActivity, "Erro ao tentar adicionar o mapeamento: ${e.message}", Toast.LENGTH_LONG).show()
                    }

问题是,当我从 android studio AVD Emulator 添加一个新文档时,它正确如下:

但是,当我从 beta 测试中安装在手机上的应用程序中添加时,它会将字段名称更改为字母:

我找不到任何可能有同样问题的人,这就是我提出这个问题的原因。

有什么想法吗?

【问题讨论】:

  • 不要描述你的数据库的样子,而是添加它的截图。
  • 完成,@AlexMamo
  • 您是否从不同位置向数据库添加数据?如果是,请将其添加到您的问题中。除此之外,mapeamento 是如何定义的?
  • “不同位置”是什么意思?关于mapeamento定义你想知道它的变量类型吗?你的数据类?
  • 这个问题似乎与在 firebase 将对象数组转换为地图数组有关,并且应用程序是否被缩小。显然,当缩小时,它失去了正确和隐式转换地图中对象的能力。不知道为什么。

标签: android kotlin hashmap google-cloud-firestore


【解决方案1】:

问题: 从技术上讲,不知道会发生什么,但问题是: 当生成“proguard minify”设置为“true”的apk时,它会丢失对象类的引用并将字段名称保存为字母。 当设置为“false”时,它通常使用正确的对象属性名称。

解决方案: 所以,就目前而言,解决方案是: 在此特定应用案例中,始终生成将 proguard minify 设置为 false 的 apk。

【讨论】:

    猜你喜欢
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2015-06-09
    相关资源
    最近更新 更多