ClassNotFoundException при отмене сортировки Parcelable
У меня проблема с анализом Parcelable через Intent.
Я создаю parcelable используя
Intent data = new Intent();
data.putExtra(ShoppingListAdapter.parcelName, la);
setResult(Activity.RESULT_OK, data);
Я получаю это в onActivityResult:
Parcelable myData = data.getParcelableExtra(ShoppingListAdapter.parcelName);
Затем передайте его другому действию, используя:
Intent myIntent = new Intent(this,Class.class);
myIntent.putExtra("myData", myData);
startActivityForResult(myIntent, RESULT);
У моего Parcelable есть еще один Parcelable, внутри которого я пишу и читаю:
list = in.readParcelable(null);
Я пытался использовать разные загрузчики классов, от ClassLoader.getSystemLoader() до MyClass.class.getClassLoader(), но все же я получаю исключение времени выполнения:
06-12 21:13:04.940: ERROR/AndroidRuntime(29962): Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling:
Моя посылка повреждена где-то до этого или я неправильно ее читаю?
Alex
3 ответа
Как было указано, это был неправильный подход к использованию. Так что, хотя я еще не решил, есть лучший способ сделать то же самое. Поэтому рассмотрите это вместо
Как объявить глобальные переменные в Android?
Хотя, если у кого-то есть идеи для ответа на оригинальный вопрос, пожалуйста, напишите. Может случиться где-то еще с кем-то еще.
Alex
У меня тоже была эта проблема, это глупо. Порядок и количество методов в writeToParcel и readToParcel должны быть одинаковыми и с одинаковыми переменными.
Я имею в виду:
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(title);
dest.writeParcelable((Parcelable)this.getLocation(), flags);
dest.writeString(value);
}
должен быть в том же порядке, что и:
private void readFromParcel(Parcel in){
this.setTitle(in.readString());
this.setLocation((Location)in.readParcelable(android.location.Location.class.getClassLoader()));
this.setValue(in.readString());
}
Помогает ли Intent.setExtrasClassLoader(java.lang.ClassLoader)?