Grüße Kollegen aus der Welt Xamarin. Ich brauche Hilfe.Xamarin + Mvvmcross + Multidex Absturz beim Wechsel auf/offline
Ich entwickelte eine Anwendung in Xamarin mit Mvvmcross 4.4 und Firebase. Im Android-Projekt musste ich multidex implementieren. Das Problem tritt auf, wenn die Anwendung ausgeführt wird und die Verbindung verloren geht (Flugzeugmodus, WLAN deaktiviert usw.) oder umgekehrt.
In der benutzerdefinierten Liste zum Erstellen des Multidex sind alle Hauptabhängigkeiten zu Firebase, der Anwendung selbst und dem Framework in der Hauptdatei enthalten.
Der gemeldete Absturz drückt aber dies:
java.lang.RuntimeException: Unable to instantiate receiver com.developer.appname.Reachability: java.lang.ClassNotFoundException: Didn't find class "com.developer.appname.Reachability" on path: DexPathList[[zip file "/data/app/com.developer.appname-1/base.apk"],nativeLibraryDirectories=[/data/app/com.developer.appname-1/lib/arm, /vendor/lib, /system/lib]]
android.app.ActivityThread.handleReceiver()ActivityThread.java:2926
android.app.ActivityThread.access$1800()ActivityThread.java:172
android.app.ActivityThread$H.handleMessage()ActivityThread.java:1499
android.os.Handler.dispatchMessage()Handler.java:102
android.os.Looper.loop()Looper.java:145
android.app.ActivityThread.main()ActivityThread.java:5832
java.lang.reflect.Method.invoke(Native Method)
java.lang.reflect.Method.invoke()Method.java:372
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run()ZygoteInit.java:1399
com.android.internal.os.ZygoteInit.main()ZygoteInit.java:1194
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.developer.appname.Reachability" on path: DexPathList[[zip file "/data/app/com.developer.appname-1/base.apk"],nativeLibraryDirectories=[/data/app/com.developer.appname-1/lib/arm, /vendor/lib, /system/lib]]
dalvik.system.BaseDexClassLoader.findClass()BaseDexClassLoader.java:56
java.lang.ClassLoader.loadClass()ClassLoader.java:511
java.lang.ClassLoader.loadClass()ClassLoader.java:469
android.app.ActivityThread.handleReceiver()ActivityThread.java:2921
... 9 more
Erreichbarkeits den Zustand der Verbindung überprüft und wird aus dem Kern verwendet:
public class Reachability : BroadcastReceiver, IReachability { ... }
<application android:name=".appname" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:allowBackup="true">
<receiver android:name=".Reachability">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
Wenn die Anwendung gestartet wird offline wird erfasst, richtig und fährt fort, um die erwarteten Daten aus dem Cache anzuzeigen. Das Gleiche passiert, wenn die App gestartet wird und eine Verbindung besteht, dass die Daten in Echtzeit vom Firebase angezeigt werden. Hervorhebung, es schlägt nur fehl, wenn die Verbindung entsprechend dem vorherigen Zustand ein- oder ausgeschaltet wird.
Vielen Dank, jede Hilfe ist willkommen.
Dank @York Shen, Ihr Rat war sehr nützlich. Dies und während der Implementierung der Anwendung wird der Erreichbarkeitsdienst als Singleton registriert, der von dem Kern zu verwenden ist. Wenn jedoch ein OnReceive auftritt, nahm ich an, dass eine andere Kopie des Dienstes verwendet wird, die sich von der im Setup registrierten unterscheidet. Ich wusste dies, die Variable, die für die erforderliche Aktion innerhalb der Erreichbarkeitsklasse verwendet wurde, und erklärte sie als statisch und von dort hat alles gut funktioniert. – Helper