Intereting Posts
Проблема с глубоким связыванием Android! Как использовать схему пользовательского URL-адреса myapp: // some_data Изменение цвета панели действий программно более одного раза Как получить имя установленного приложения в android? Как указать путь библиотек в файле Android.mk или файле Application.mk? Android Studio 2.2 Preview 1 Проблемы с рендерингом Как использовать getListView () в действии? Инструменты для Android r17 x86 emulator – почему я не могу создать x86 AVD? Как я могу использовать код BitmapRegionDecoder в android 2.2.2 (Froyo)? Сдвиг столбца Gridview вверх и вниз при касании этой колонки Sencha Touch 2.1: Панель форм Панель скрывает активное текстовое поле на Android Что означает ABI: armeabi-v7a в деталях версии Android? Укажите внутренние сведения о том, как это используется? Android ACTION_IMAGE_CAPTURE Intent Android: CollapsingToolbarLayout расширяет текст, но не сворачивает текст Аутентификация Dropbox оставляет открытый браузер Как использовать ссылки на приложение для передачи параметра на игровой магазин android, который будет извлечен при установке приложения

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"); } } }