Salutations collègues du monde xamarin. J'ai besoin d'aide.Xamarin + Mvvmcross + Multidex crash lors du changement on/offline
J'ai développé une application dans Xamarin avec Mvvmcross 4.4 et Firebase. Dans le projet Android, j'ai dû implémenter multidex. Le problème qui se produit est lorsque l'application est en cours d'exécution et la connexion est perdue (mode avion, wifi désactivé, etc.) ou vice versa.
Dans la liste personnalisée pour construire le multidex, toutes les dépendances principales à Firebase, l'application elle-même et l'infrastructure, sont placées dans le fichier principal.
L'accident rapporté exprime cependant ceci:
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
joignabilité vérifie l'état de la connexion et est utilisé à partir du noyau:
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>
Si l'application est lancée en mode hors connexion, il est correctement détecté et procède à l'affichage des données attendues à partir du cache. La même chose se produit lorsque l'application est lancée et il y a connexion que les données sont affichées en temps réel à partir de Firebase. Soulignant, il échoue seulement quand la connexion changent à on ou off, selon l'état précédent.
Merci beaucoup, toute aide est la bienvenue.
Merci @York Shen, votre conseil a été très utile. Cela et pendant la mise en œuvre de l'application, le service d'accessibilité est enregistré comme singleton, à utiliser à partir du noyau. Cependant, quand un OnReceive se produit, j'ai supposé qu'une autre copie du service est utilisée, différente de celle enregistrée dans la configuration. Sachant cela, la variable utilisée pour la classe Action requise dans Reachability, je l'ai déclarée statique et à partir de là, tout a bien fonctionné. – Helper