ClassNotFoundException чтение объекта Serializable в классе, расширяющем MapFragment в onSaveInstanceState

У меня есть класс, расширяющий SupportMapFragment, где я загружаю некоторые данные из бэкэнд и показываю маркеры. У меня также есть еще один фрагмент, в котором я показываю детали, соответствующие выбранному маркеру на карте. Я показываю фрагмент деталей ниже карты в портретном режиме и бок о бок в ландшафте.

public class MapDisplayFragment extends SupportMapFragment { private ArrayList<ShowLocation> locations = null; public void onViewCreated(View view, Bundle savedInstanceState) { if (savedInstanceState != null) { locations = (ArrayList<ShowLocation>)savedInstanceState.getSerializable("LOCATIONS"); } } @Override public void onSaveInstanceState(Bundle outState) { if (outState == null) { outState = new Bundle(); } outState.putSerializable("LOCATIONS", locations); super.onSaveInstanceState(outState); } 

У меня есть класс, который реализует Serializable, который используется в производном классе карты. Я использую onSaveInstanceState для хранения объекта, так что мне не нужно снова извлекать данные из бэкэнд. Но приложение вылетает с java.lang.RuntimeException: Parcelable сталкиваетсяClassNotFoundException читает объект Serializable, когда я переворачиваю устройство.

 public class ShowLocation implements Serializable { private String geoCodeLat = Constants.EMPTY_STRING; private String geoCodeLng = Constants.EMPTY_STRING; .... public String getGeoCodeLat() { return geoCodeLat; } public void setGeoCodeLat(String geoCodeLat) { this.geoCodeLat = geoCodeLat; } public String getGeoCodeLng() { return geoCodeLng; } public void setGeoCodeLng(String geoCodeLng) { this.geoCodeLng = geoCodeLng; } .... } 

Я определил макет следующим образом:

 <LinearLayout android:id="@+id/layoutMapData" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <fragment android:id="@+id/mapFrag" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="0.5" class="com.test.appFragments.MapDisplayFragment" /> <LinearLayout android:id="@+id/layoutDetails" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="0.5" android:visibility="gone" > </LinearLayout> </LinearLayout> 

Если кто-то пришел по этому вопросу или если есть решение этой проблемы, пожалуйста, помогите мне.

Solutions Collecting From Web of "ClassNotFoundException чтение объекта Serializable в классе, расширяющем MapFragment в onSaveInstanceState"

Не знаю, почему это происходит. Похоже, что данные становятся неуправляемыми где-то в сервисах Google Play, и нет информации о наших классах. Поправьте меня если я ошибаюсь.

Однако есть обходной путь. Вместо сохранения ваших данных в outState сохраните его в комплекте с аргументами (который также сохраняется). Вот пример:

 public MyFragment extends SupportMapFragment { private MapView mMapView; public MyFragment() { /* * We need to set bundle here. * Note, that if you're actually using arguments * then skip line below. */ setArguments(new Bundle()); } /* YOUR CODE HERE */ @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); /* I'm using Serializable, but you can use whatever you want */ getArguments().putSerializable("yourfield", yourValue); } @Override public void onCreate(Bundle savedState) { super.onCreate(savedState); mMapView.onCreate(savedState); if(savedState != null) { yourValue = getArguments.getSerializable("yourField"); } } }