原因:com.google.crypto.tink.shaded.protobuf.InvalidProtocolBufferException:协议消息包含无效标签(零)

moh*_*jid 21 android kotlin android-studio

启动活动时,我的应用程序在 getEncryptedSharedPrefs 处崩溃:

    if(getEncryptedSharedPrefs().getString("pinSettingsLogin", "")!!.isEmpty()){
        getEncryptedSharedPrefs().edit()
            .putString("pinSettingsLogin" , "0000")
            .apply()
    }
Run Code Online (Sandbox Code Playgroud)

出现此错误:

Caused by: com.google.crypto.tink.shaded.protobuf.InvalidProtocolBufferException: Protocol message contained an invalid tag (zero).
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这个 if 语句适用于 Android 10 和 11,但不适用于 Android 12。这个 if 语句之所以在这里,是因为在下面的“if”中,我检查 pinSettingsLogin = 0000 是否如此,以便它自行进入新活动。

    if(getEncryptedSharedPrefs().getString("pinSettingsLogin", "").equals("0000")){
        val i = Intent(this, SettingsActivity::class.java)
        startActivity(i)
        overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left)
    }
Run Code Online (Sandbox Code Playgroud)

Jim*_*bdi 12

这是一个错误EncryptedSharedPreferences,问题发生在 的初始化上EncryptedSharedPreferences

在这里查看

  • 有人可以在这里分享我需要更改代码来解决此问题的答案吗?清除缓存不是一个解决方案,我无法告诉用户,如果崩溃,请清除缓存。 (4认同)
  • 看起来这个问题现在可以在 .NET 7 中修复:https://github.com/dotnet/maui/pull/15650 (2认同)

小智 8

您是否尝试过清除应用程序的缓存?

这可能会解决问题!

  • 有人可以解释一下导致此崩溃的原因以及如何在代码中修复它吗?我们不能指望用户会自己清除数据,他只会诅咒应用程序并离开 (16认同)