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());
}
Другие вопросы по тегам