You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase实时数据库存数据报错:无StringBuilder可序列化属性

Firebase实时数据库保存数据报错:No properties to serialize found on class java.lang.StringBuilder

报错信息

com.google.firebase.database.DatabaseException: No properties to serialize found on class java.lang.StringBuilder
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.<init>(CustomClassMapper.java:548)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.loadOrCreateBeanMapperForClass(CustomClassMapper.java:330)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(CustomClassMapper.java:167)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(CustomClassMapper.java:142)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToPlainJavaTypes(CustomClassMapper.java:61)
at com.google.firebase.database.DatabaseReference.setValueInternal(DatabaseReference.java:282)
at com.google.firebase.database.DatabaseReference.setValue(DatabaseReference.java:159)

此前项目使用相同代码无问题,现在却出现该错误。以下是用于保存数据的函数代码:

private fun saveDetails() {

    val userDataRef: DatabaseReference =
        FirebaseDatabase.getInstance().reference.child("UsersData").child(currentUserId)

    val userMap = HashMap<String, Any>()
    userMap["name"] = name
    userMap["email"] = email
    userMap["imageUrl"] = profileImageUrl
    userMap["phoneNumber"] = number

        userDataRef.setValue(userMap).addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Toast.makeText(
                    baseContext,
                    "$name has successfully registered with email id $email.",
                    Toast.LENGTH_SHORT
                ).show()
                startActivity(Intent(this, MainActivity::class.java))
            } else {
                Toast.makeText(baseContext, task.result.toString(), Toast.LENGTH_SHORT).show()
                Log.e("Task  Unsuccessful", task.result.toString())
            }
        }
    }

问题原因与解决方案

  • 问题根源:Firebase实时数据库的序列化器无法处理StringBuilder类型的数据。你存入userMap的name、email、profileImageUrl或number中,至少有一个变量实际是StringBuilder类型而非String,导致序列化失败。

  • 修复方法:将所有存入userMap的字符串类变量转换为String类型:
    直接对变量调用.toString()方法,修改后的代码如下:

    val userMap = HashMap<String, Any>()
    userMap["name"] = name.toString()
    userMap["email"] = email.toString()
    userMap["imageUrl"] = profileImageUrl.toString()
    userMap["phoneNumber"] = number.toString()
    

    同时检查变量的初始化和赋值逻辑,确保后续操作中这些变量直接使用String类型,避免意外创建StringBuilder实例。

  • 额外排查建议:

    • 确认currentUserId是有效的String类型,避免传入非字符串类型引发连锁问题。
    • 若近期升级过Firebase依赖,可能是序列化逻辑的兼容性变化,此时需确保所有待序列化数据都是标准可序列化类型(如String、Int、Boolean、Map、自定义数据类等)。

内容的提问来源于stack exchange,提问作者Prasad B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:47:38