2013-05-15 2 views
2

J'ai un MvxListView avec quelques éléments. Chaque article se compose de 2 composants, l'un est visible et l'autre n'est pas (Gone). La propriété de visibilité du composant disparu est liée à une propriété booléenne sur le modèle de vue, avec un convertisseur de valeur de visibilité booléenne .Exception de référence null dans la vue android Liaison de visibilité

Lorsque l'élément de liste est cliqué, la propriété boolean est définie sur true, ce qui fait que le composant disparu devient visible, obtenant ainsi une sorte d'effet d'agrandissement pour cet élément particulier.

Cela fonctionne parfaitement, 99% du temps.

Une fois dans un certain temps, pour une raison que je reçois exception de référence null avec la trace de pile suivante:

691.32 Problem seen during binding execution for from IsInEditMode to Visibility - problem TargetInvocationException: Exception has been thrown by the target of an invocation. 
    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 
    at System.Reflection.MonoProperty.SetValue (System.Object obj, System.Object value, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] index, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
    at System.Reflection.PropertyInfo.SetValue (System.Object obj, System.Object value, System.Object[] index) [0x00000] in <filename unknown>:0 
    at Cirrious.MvvmCross.Binding.Bindings.Target.MvxPropertyInfoTargetBinding.SetValue (System.Object value) [0x00000] in <filename unknown>:0 
    at Cirrious.MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource (Boolean isAvailable, System.Object value) [0x00000] in <filename unknown>:0 
    InnerException was NullReferenceException: Object reference not set to an instance of an object 

Je ne sais pas si cela est question MvvmCross, ou un problème de vue Android, mais il pourrait être important de noter que le composant disparu a un bouton. Alors que tous les éléments de la liste sont réduits, il n'y a pas de boutons, quand j'élargis 1 item, il y a un bouton et tout l'item de la liste devient cliquable, mais le bouton est cliquable (c'est un bogue non apparenté un jour, mais actuellement pas important pour moi). J'utilise MvvmCross v3. J'avoue que je n'utilise pas le dernier build (1 mois), et alors que cela vaut la peine d'essayer de voir si cela se produit avec de nouveaux bits, le problème est rare, et difficile à reproduire.

I ont des informations de trace de pile plus détaillée:

at (wrapper delegate-invoke) <Module>.invoke_void__this___intptr_intptr_intptr_JValue[] (intptr,intptr,intptr,Android.Runtime.JValue[]) <IL 0x00062, 0xffffffff> 
at Android.Runtime.JNIEnv.CallVoidMethod (intptr,intptr,Android.Runtime.JValue[]) [0x00000] in /Users/builder/data/lanes/monodroid-lion-bs1/03814ac5/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:364 
at Android.Views.View.set_Visibility (Android.Views.ViewStates) [0x0003e] in /Users/builder/data/lanes/monodroid-lion-bs1/03814ac5/source/monodroid/src/Mono.Android/platforms/android-8/src/generated/Android.Views.View.cs:4498 
at (wrapper runtime-invoke) <Module>.runtime_invoke_void__this___int (object,intptr,intptr,intptr) <IL 0x00054, 0xffffffff> 
at System.Reflection.MonoMethod.Invoke (object,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo) <IL 0x000c6, 0x00553> 
at System.Reflection.MonoProperty.SetValue (object,object,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo) <IL 0x0006c, 0x00353> 
at System.Reflection.PropertyInfo.SetValue (object,object,object[]) <IL 0x00007, 0x000a3> 
at Cirrious.MvvmCross.Binding.Bindings.Target.MvxPropertyInfoTargetBinding.SetValue (object) <IL 0x0007b, 0x0033f> 
at Cirrious.MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource (bool,object) <IL 0x00054, 0x001f3> 
at Cirrious.MvvmCross.Binding.Bindings.MvxFullBinding.<CreateSourceBinding>b__0 (object,Cirrious.MvvmCross.Binding.Bindings.Source.MvxSourcePropertyBindingEventArgs) <IL 0x0000d, 0x00083> 
at Cirrious.MvvmCross.Binding.Bindings.Source.MvxSourceBinding.FireChanged (Cirrious.MvvmCross.Binding.Bindings.Source.MvxSourcePropertyBindingEventArgs) <IL 0x0000d, 0x000bf> 
at Cirrious.MvvmCross.Binding.Bindings.Source.Leaf.MvxLeafPropertyInfoSourceBinding.OnBoundPropertyChanged() <IL 0x00007, 0x00073> 
at Cirrious.MvvmCross.Binding.Bindings.Source.MvxPropertyInfoSourceBinding.SourcePropertyChanged (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00014, 0x000ab> 
at (wrapper runtime-invoke) <Module>.runtime_invoke_void__this___object_object (object,intptr,intptr,intptr) <IL 0x0005a, 0xffffffff> 
at System.Reflection.MonoMethod.Invoke (object,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo) <IL 0x000c6, 0x00553> 
at System.Reflection.MethodBase.Invoke (object,object[]) <IL 0x00006, 0x0008f> 
at Cirrious.MvvmCross.Binding.WeakSubscription.MvxWeakEventSubscription`2.OnSourceEvent (object,TEventArgs) <IL 0x0002b, 0x00137> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00027, 0x00073> 
at (wrapper delegate-invoke) <Module>.invoke_void__this___object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs) <IL 0x00059, 0xffffffff> 
at Cirrious.MvvmCross.ViewModels.MvxNotifyPropertyChanged/<>c__DisplayClass1.<RaisePropertyChanged>b__0() <IL 0x00021, 0x000f7> 
at Cirrious.MvvmCross.Droid.Views.MvxAndroidMainThreadDispatcher/<>c__DisplayClass1.<RequestMainThreadAction>b__0 (object) <IL 0x00006, 0x0005b> 
at Android.App.SyncContext.Post (System.Threading.SendOrPostCallback,object) [0x00025] in /Users/builder/data/lanes/monodroid-lion-bs1/03814ac5/source/monodroid/src/Mono.Android/src/Android.App/SyncContext.cs:19 
at Cirrious.MvvmCross.Droid.Views.MvxAndroidMainThreadDispatcher.RequestMainThreadAction (System.Action) <IL 0x0001f, 0x00173> 
at Cirrious.CrossCore.Core.MvxMainThreadDispatchingObject.InvokeOnMainThread (System.Action) <IL 0x0000f, 0x00097> 
at Cirrious.MvvmCross.ViewModels.MvxNotifyPropertyChanged.RaisePropertyChanged (string) <IL 0x0002a, 0x001ff> 
at Cirrious.MvvmCross.ViewModels.MvxNotifyPropertyChanged.RaisePropertyChanged<bool> (System.Linq.Expressions.Expression`1<System.Func`1<bool>>) <IL 0x0000a, 0x00087> 
at Game.GamePlayerViewModel.set_IsInEditMode (bool) [0x00008] in c:\Users\Roman\Documents\Projects\Games\Game\ViewModels\Players\GamePlayerViewModel.cs:74 
at Game.GamePlayersViewModel.HandleSelectPlayer (Game.GamePlayerViewModel) [0x0000f] in c:\Users\Roman\Documents\Projects\Game\Game\ViewModels\Players\GamePlayersViewModel.cs:117 
at Cirrious.MvvmCross.ViewModels.MvxCommand`1.Execute (object) <IL 0x00015, 0x000bb> 
at Cirrious.MvvmCross.Binding.Droid.Views.MvxListView.ExecuteCommandOnItem (System.Windows.Input.ICommand,int) <IL 0x00021, 0x001b7> 
at Cirrious.MvvmCross.Binding.Droid.Views.MvxListView.<SetupItemClickListeners>b__0 (object,Android.Widget.AdapterView/ItemClickEventArgs) <IL 0x0000d, 0x00087> 
at Android.Widget.AdapterView/IOnItemClickListenerImplementor.OnItemClick (Android.Widget.AdapterView,Android.Views.View,int,long) [0x0000b] in /Users/builder/data/lanes/monodroid-lion- bs1/03814ac5/source/monodroid/src/Mono.Android/platforms/android-8/src/generated/Android.Widget.AdapterView.cs:233 
at Android.Widget.AdapterView/IOnItemClickListenerInvoker.n_OnItemClick_Landroid_widget_AdapterView_Landroid_view_View_IJ (intptr,intptr,intptr,intptr,int,long) [0x00018] in /Users/builder/data/lanes/monodroid-lion- bs1/03814ac5/source/monodroid/src/Mono.Android/platforms/android-8/src/generated/Android.Widget.AdapterView.cs:170 
at (wrapper dynamic-method) object.5e36d7c3-b7bd-4ceb-af22-a12ff6cf17a9 (intptr,intptr,intptr,intptr,int,long) <IL 0x00029, 0x0009b> 
at (wrapper native-to-managed) object.5e36d7c3-b7bd-4ceb-af22-a12ff6cf17a9 (intptr,intptr,intptr,intptr,int,long) <IL 0x00024, 0xffffffff> 

En outre, le composant dont la visibilité est lié à la propriété est LinearLayout.

Des idées?

Merci à l'avance

+0

Besoin de moar [logcat] (http://docs.xamarin.com/guides/android/deployment%2C_testing%2C_and_metrics/android_debug_log). 'NullReferenceException's peut être provoqué par [dalvik abandonnant le processus] (http://docs.xamarin.com/guides/android/troubleshooting#15.unexpected-nullreferenceexceptions); plus de sortie de logcat serait capable de réfuter cette possibilité. – jonp

Répondre

1

La trace de la pile ne regarde comme il est dans l'appel du viewmodel à l'interface utilisateur.

Il suggère que quelque part au cours de l'opération set sur la Visibility du composant d'interface utilisateur, le code à l'intérieur qui frappe un NullReferenceException - mais je ne vois pas plus en détail de cette trace de la pile.

Le NullReferenceException se trouve quelque part dans la méthode set de la vue. C'est après que le ValueConverter a fait son travail.

Je ne peux pas donner une solution à cela à partir des informations disponibles, et il n'y a rien que je connaisse dans les récents correctifs v3 qui aurait résolu cela. Je suppose que c'est peut-être quelque chose à voir avec les lignes/vues qui sortent du cadre. Pour résoudre ce problème, je pense que vous devrez peut-être trouver un moyen de le rendre plus reproductible (plus de 99% que 1%).

Voici quelques façons d'examiner cette question plus:

  1. Pouvez-vous capturer plus d'informations de trace de la pile - peut-être, y compris trace logcat aussi?
  2. Pouvez-vous rendre cela plus fréquent?
  3. Pouvez-vous obtenir le même effet dans un projet de test de repro spécifique plus petit?
  4. Pouvez-vous simplement essayer des choses 'pot luck' - par ex. Que faire si vous essayez de changer la hauteur de l'article plutôt que la visibilité?
  5. Pouvez-vous donner plus d'informations ici? par exemple. Quelle est la visibilité de component que vous liez? Est-ce juste un widget standard?
+0

après la mise à jour le fait que la référence null se produit 'at (wrapper delegate-invoke) .invoke_void__this ___ intptr_intptr_intptr_JValue [] (intptr, intptr, intptr, Android.Runtime.JValue []) ' suggère que ceci est se produisant quelque part dans la liaison Xamarin-> Java ou ** lower ** (probablement quelque part dans le Java). LogCat pourrait aider. Si non, alors il semble que vous ayez besoin d'un cas plus facilement reproché (à ce stade, je ne pense pas que ce soit un problème Mvx - je * pense * ce problème se produirait si vous faisiez la visibilité en un rien Adaptateur') – Stuart

+0

Oui, malheureusement, je n'ai pas été en mesure de reproduire cela dans la dernière demi-heure tandis que logcat ci-joint :( – Roman

+0

a été en mesure de le réécrire finalement.Malheureusement, logcat n'a pas d'informations supplémentaires que je n'ai pas déjà posté, même stacktrace – Roman

Questions connexes