2014-07-16 9 views
2

Je crée une application Android avec Xamarin.Forms. Mon application iOS est déjà terminée et publiée. Ma version Android n'arrêtera pas de lancer plusieurs exceptions.OnPropertyChanged déclenche une exception sur android dans l'application xamarin.forms

La première exception est un NullReferenceException. Cette pause sur le code suivant ciselée:

handler(this, new PropertyChangedEventArgs(propertyName)); 

Ceci est à l'intérieur de ma méthode OnPropertyChanged dans une classe de NotifyBase personnalisé J'utilise pour mes modèles. (également défaut si je supprime tout sauf cette ligne de la méthode.)

La sortie de débogage me dit ceci:

System.NullReferenceException: Object reference not set to an instance of an object 
An unhandled exception occured. 
Exception: 

Il est suivi par un TargetInvocationException donnant cette trace de la pile:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. 
07-16 17:37:47.916 I/MonoDroid(27212): UNHANDLED EXCEPTION:  System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object 
07-16 17:37:47.916 I/MonoDroid(27212):07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.Forms+AndroidPlatformServices.BeginInvokeOnMainThread (System.Action action) [0x00000] in <filename unknown>:0 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.Device.BeginInvokeOnMainThread (System.Action action) [0x00000] in <filename unknown>:0 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.BindingExpression+BindingExpressionPart.PropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs args) [0x00000] in <filename unknown>:0 
07-16 17:37:47.916 I/MonoDroid(27212): at (wrapper delegate-invoke) <Module>:invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) 
07-16 17:37:47.916 I/MonoDroid(27212): at (wrapper delegate-invoke) <Module>:invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) 
07-16 17:37:47.916 I/MonoDroid(27212): at TransMission.Mobile.Helper.NotifyBase.OnPropertyChanged (System.String propertyName) [0x00087] in c:\Users\Frederik.TECNO\Documents\Visual Studio 2012\Projects\TransMission\TransMission.Mobile\TransMission.Mobile\Helper\NotifyBase.cs:68 
07-16 17:37:47.916 I/MonoDroid(27212): at TransMission.Mobile.Helper.NotifyBase.SetField[DateTime] (System.DateTime& field, DateTime value, System.String propertyName) [0x000a2] in c:\Users\Frederik.TECNO\Documents\Visual Studio 2012\Projects\TransMission\TransMission.Mobile\TransMission.Mobile\Helper\NotifyBase.cs:102 
07-16 17:37:47.916 I/MonoDroid(27212): at TransMission.Mobile.Core.TransMissionCore.set_Date (DateTime value) [0x00001] in c:\Users\Frederik.TECNO\Documents\Visual Studio 2012\Projects\TransMission\TransMission.Mobile\TransMission.Mobile\Core\TransMissionCore.cs:275 
07-16 17:37:47.916 I/MonoDroid(27212): at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) 
07-16 17:37:47.916 I/MonoDroid(27212): at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
07-16 17:37:47.916 I/MonoDroid(27212): --- End of inner exception stack trace --- 
07-16 17:37:47.916 I/MonoDroid(27212): at System.Reflection.MonoMethod.Invoke (object,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo) <IL 0x00062, 0x0033c> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.BindingExpression.ApplyCore (object,Xamarin.Forms.BindableObject,Xamarin.Forms.BindableProperty,bool) <IL07-16 17:37:47.916 I/MonoDroid(27212): at System.Reflection.MethodBase.Invoke (object,object[]) <IL 0x00006, 0x0008f> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.BindingExpression.ApplyCore (object,Xamarin.Forms.BindableObject,Xamarin.Forms.BindableProperty,bool) <IL 0x00295, 0x0162f> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.BindingExpression.Apply (bool) <IL 0x00041, 0x0018b> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.Binding.Apply (bool) <IL 0x00027, 0x00113> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.BindableObject/<>c__DisplayClass1.<SetValueCore>b__0() <IL 0x00100, 0x00493> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.BindableObject.SetValueCore (Xamarin.Forms.BindableProperty,object,bool,bool,bool) <IL 0x001b4, 0x009d3> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.BindingExpression.ApplyCore (object,Xamarin.Forms.BindableObject,Xamarin.Forms.BindableProperty,bool) <IL 0x001f1, 0x011db> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.BindingExpression.Apply (object,Xamarin.Forms.BindableObject,Xamarin.Forms.BindableProperty) <IL 0x0007e, 0x003bf> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.Binding.Apply (object,Xamarin.Forms.BindableObject,Xamarin.Forms.BindableProperty) <IL 0x0004d, 0x00237> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.BindableObject.ApplyBindings (object) <IL 0x0003a, 0x002af> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.BindableObject.SetInheritedBindingContext (Xamarin.Forms.BindableObject,object) <IL 0x00056, 0x0029b> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.Element.OnBindingContextChanged() <IL 0x0001c, 0x00157> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.View.OnBindingContextChanged() <IL 0x0003b, 0x002a3> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.BindableObject.SetInheritedBindingContext (Xamarin.Forms.BindableObject,object) <IL 0x0005c, 0x002bf> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.Element.set_Parent (Xamarin.Forms.Element) <IL 0x00020, 0x00107> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.Element.OnChildAdded (Xamarin.Forms.Element) <IL 0x00002, 0x00053> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.Page.OnInternalAdded (Xamarin.Forms.VisualElement) <IL 0x00015, 0x000bf> 
07-16 17:37:47.916 I/MonoDroid(27212): at Xamarin.Forms.Page.InternalChildrenOnCollectionChanged (object,System.Collections.Specialized.NotifyCollectionC 

Exception non gérée:

Encore une fois, suivi par un TargetInvocationException donnant cette trace de la pile:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. 
07-16 17:41:19.182 E/mono (27212): 
07-16 17:41:19.182 E/mono (27212): Unhandled Exception: 
07-16 17:41:19.182 E/mono (27212): at (wrapper delegate-invoke) <Module>:invoke_void__this___object_PropertyChangedEventArgs (object,System.Compon07-16 17:41:19.182 E/mono (27212): System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object 
07-16 17:41:19.182 E/mono (27212): at Xamarin.Forms.Forms+AndroidPlatformServices.BeginInvokeOnMainThread (System.Action action) [0x00000] in <filename unknown>:0 
07-16 17:41:19.182 E/mono (27212): at Xamarin.Forms.Device.BeginInvokeOnMainThread (System.Action action) [0x00000] in <filename unknown>:0 
07-16 17:41:19.182 E/mono (27212): at Xamarin.Forms.BindingExpression+BindingExpressionPart.PropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs args) [0x00000] in <filename unknown>:0 
07-16 17:41:19.182 E/mono (27212): at (wrapper delegate-invoke) <Module>:invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) 
07-16 17:41:19.182 E/mono (27212): at (wrapper delegate-invoke) <Module>:invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) 
07-16 17:41:19.182 E/mono (27212): at TransMission.Mobile.Helper.NotifyBase.OnPropertyChanged (System.String propertyName 
07-16 17:41:19.182 E/mono-rt (27212): [ERROR] FATAL UNHANDLED EXCEPTION: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object 
07-16 17:41:19.182 E/mono-rt (27212): at Xamarin.Forms.Forms+AndroidPlatformServices.BeginInvokeOnMainThread (System.Action action) [0x00000] in <filename unknown>:0 
07-16 17:41:19.182 E/mono-rt (27212): at Xamarin.Forms.Device.BeginInvokeOnMainThread (System.Action action) [0x00000] in <filename unknown>:0 
07-16 17:41:19.182 E/mono-rt (27212): at Xamarin.Forms.BindingExpression+BindingExpressionPart.PropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs args) [0x00000] in <filename unknown>:0 
07-16 17:41:19.182 E/mono-rt (27212): at (wrapper delegate-invoke) <Module>:invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) 
07-16 17:41:19.182 E/mono-rt (27212): at (wrapper delegate-invoke) <Module>:invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) 
07-16 17:41:19.182 E/mono-rt (27212): at TransMission.Mobile.Helper.NotifyBase.OnPropertyChanged (System.String 
Das Programm "Mono" wurde mit Code 0 (0x0) beendet. 

Comme mes debug états de sortie ce qui semble se produire pour une propriété DateTime qui est définie sur ce qui semble être une valeur minimale pour la DatePicker:

07-16 17:32:45.761 I/mono-stdout(27212): DEBUG  - Changing value from '01.01.0001 00:00:00' to '01.01.1900 00:00:00'. 
07-16 17:32:45.771 I/mono-stdout(27212): DEBUG  - Raising PropertyChanged for: 'TransMissionCore.Date'. 

Mes codes fonctionne parfaitement sur iOS. Mais sur Android, c'est un bouchon de spectacle. J'ai essayé mon application avec la dernière version de Xamarin.Forms (1.2.1.6229) et avec 1.1.1.6206 mais cela ne fait aucune différence.

Existe-t-il une solution de contournement? Ou est-ce que je fais une erreur? S'il vous plaît donner des conseils.

+0

Si le gestionnaire est nul, êtes-vous sûr que le code Android s'abonne aux événements? – SKall

+0

Avez-vous vérifié votre propriété datamodel et votre convertisseur (s'il y en a un)? Je parie que NullReferenceException est dans votre code. – ad1Dima

+0

Le gestionnaire n'est pas nul. Et la propriété n'est pas non plus nulle. 'DateTime' donc non nullable. Aucun convertisseur impliqué. Comme répondu de l'équipe Xamarin dans leur forum, c'est un bug connu. – FrTerstappen

Répondre

2

Ceci est corrigé dans la dernière version des formulaires xamarin. Je n'ai pas fait assez attention à la trace de la pile de l'exception dans la dernière version. Je pensais que les traces de la pile sont égales, mais ils diffèrent dans certaines parties Cela semble avoir une autre source et provient d'une autre partie de mon application.

Questions connexes