Xamarin MultiSelectListPreference InvalidCastExceptionC#

Место общения программистов C#
Ответить
Anonymous
 Xamarin MultiSelectListPreference InvalidCastException

Сообщение Anonymous »

В настоящее время я пытаюсь сохранить список строк в общем хранилище настроек Android. Я использую общие настройки и поэтому могу использовать MultiSelectListPreference самого Android. Проблема не в сохранении стоимости, но, возможно, в этом причина. Сама проблема начинается, когда я пытаюсь прочитать значение. В этот самый момент Android передает ArrayList коду Xamarin, и Xamarin должен преобразовать его в список C#. И тогда я получаю следующее исключение InvalidCastException:

Код: Выделить всё

[MonoDroid] UNHANDLED EXCEPTION:
[MonoDroid] System.InvalidCastException: Cannot cast from source type to destination type.
[MonoDroid] at (wrapper castclass) object.__castclass_with_cache (object,intptr,intptr) 
[MonoDroid] at Android.Runtime.JavaSet`1.FromJniHandle (intptr,Android.Runtime.JniHandleOwnership) 
[MonoDroid] at Android.Content.ISharedPreferencesInvoker.GetStringSet (string,System.Collections.Generic.ICollection`1) 
[MonoDroid] at canvastix.MultiSelectListPreference.OnDialogClosed (bool) 
[MonoDroid] at Android.Preferences.DialogPreference.n_OnDialogClosed_Z (intptr,intptr,bool) 
[MonoDroid] at (wrapper dynamic-method) object.4bc48339-d8f3-443a-a584-0088f55fe375 (intptr,intptr,bool) 
[mono]
[mono] Unhandled Exception:
[mono] System.InvalidCastException: Cannot cast from source type to destination type.
[mono]   at (wrapper castclass) object:__castclass_with_cache (object,intptr,intptr)
[mono]   at Android.Runtime.JavaSet`1[System.String].FromJniHandle (IntPtr handle, JniHandleOwnership transfer) [0x00000] in :0
[mono]   at Android.Content.ISharedPreferencesInvoker.GetStringSet (System.String key, ICollection`1 defValues) [0x00000] in :0
[mono]   at canvastix.MultiSelectListPreference.OnDialogClosed (Boolean positiveResult) [0x00000] in :0
[mono]   at Android.Preferences.DialogPreference.n_OnDialogClosed_Z (IntPtr jnienv, IntPtr native__this, Boolean positiveResult) [0x00000] in :0
[mono]   at (wrapper dynamic-method) object:4bc48339-d8f3-443a-a584-0088f55fe375 (intptr,intptr,bool)
[mono-rt] [ERROR] FATAL UNHANDLED EXCEPTION: System.InvalidCastException: Cannot cast from source type to destination type.
[mono-rt]   at (wrapper castclass) object:__castclass_with_cache (object,intptr,intptr)
[mono-rt]   at Android.Runtime.JavaSet`1[System.String].FromJniHandle (IntPtr handle, JniHandleOwnership transfer) [0x00000] in :0
[mono-rt]   at Android.Content.ISharedPreferencesInvoker.GetStringSet (System.String key, ICollection`1 defValues) [0x00000] in :0
[mono-rt]   at canvastix.MultiSelectListPreference.OnDialogClosed (Boolean positiveResult) [0x00000] in :0
[mono-rt]   at Android.Preferences.DialogPreference.n_OnDialogClosed_Z (IntPtr jnienv, IntPtr native__this, Boolean positiveResult) [0x00000] in :0
[mono-rt]   at (wrapper dynamic-method) object:4bc48339-d8f3-443a-a584-0088f55fe375 (intptr,intptr,bool)
Я использую следующий фрагмент кода для чтения значения в действии. Ничего особенного:

Код: Выделить всё

Button button = FindViewById (Resource.Id.button);
button.Click += delegate {
//Read value
ISharedPreferences Prefs = PreferenceManager.GetDefaultSharedPreferences (this);
ICollection list = Prefs.GetStringSet("list", new List());
Toast.MakeText(this, "Total items: " + list.Count, ToastLength.Short).Show();
};
Я использую следующий код, чтобы показать MultiSelectListPreference во фрагменте:
Это макет действия:
И последнее, но не менее важное: значения списка:

Код: Выделить всё



1
2


Item 1
Item 2


Не стесняйтесь попробовать. В манифесте я установил для minSdkVersion значение 15, а для targetSdkVersion — значение 19.

Через неделю я понял, что это, должно быть, ошибка в Xamarin. Так что, если вы найдете обходной путь, это тоже будет здорово.

Подробнее здесь: https://stackoverflow.com/questions/269 ... texception
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»