我已经检查了 SO 中提出的所有问题,但找不到我的问题的答案。
我们在 PlayStore 中有一个应用程序,该应用程序是在 Xamarin.Android 中开发的,并通过共享项目与 Xamarin.iOS 共享代码。
现在我们正在切换到 Xamarin.Forms。我们已经改变了, 一些用户界面 基于本地设备中存储的Token的自动登录登录机制。
该应用程序在设备和模拟器中运行良好。
我们已将应用程序上传到 Playstore。如果用户的设备中有旧版本,则更新后应用程序会在显示闪屏几秒钟后崩溃。 如果我们卸载旧版本,它就可以正常工作。
Google 控制台中出现错误:
java.lang.RuntimeException:
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2955)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java030)
at android.app.ActivityThread.-wrap11 (Unknown Source)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1696)
at android.os.Handler.dispatchMessage (Handler.java:105)
at android.os.Looper.loop (Looper.java:164)
at android.app.ActivityThread.main (ActivityThread.java:6938)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java27)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)
Caused by: java.lang.ClassCastException:
at android.app.SharedPreferencesImpl.getLong (SharedPreferencesImpl.java:279)
at md56c96bd185bfbb3ebebdd94ef17444e8f.MainActivity.n_onCreate (Native Method)
at md56c96bd185bfbb3ebebdd94ef17444e8f.MainActivity.onCreate (MainActivity.java1)
at android.app.Activity.performCreate (Activity.java:7174)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1220)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2908)
我们不确定为什么会发生这种情况。谁能告诉我为什么会发生这种情况以及如何预防。另外,是否可以在 VisualStudio 中重现此问题?
谢谢
最佳答案
您的 SharedPreferences 参数可能具有不兼容的类型。而且我没有找到证据表明这可能是 xamarin.Forms 问题。如果你看一下源代码SharedPreferencesImpl.java对于 getLong 方法,您将看到以下转换:
Long v = (Long)mMap.get(key);
这意味着在旧版本中存在名称相同但类型与 Long 不同的参数。您在 MainActivity 的 onCreate 方法中读取了此参数,但参数类型不兼容。
关于visual-studio - Xamarin.Forms 应用程序更新后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51869852/