Класс сохраненного экземпляра не найден при изменении ориентации

Я пытаюсь компенсировать свои элементы списка, когда ориентация экрана изменяется, используя saveInstance и Bundle, но я продолжаю получать множественные ошибки java.lang.ClassNotFoundException. Когда я шагаю по коду, кажется, что он добавляет элемент в пакет, но когда я пытаюсь просмотреть его в режиме отладки, он показывает ошибку java.lang.ClassNotFoundException. Я хотел бы отметить, что сериализуемое значение "ts" показывает ту же ошибку, но когда я поворачиваю экран, сохраняется первоначальное время.

Я действительно не уверен, что происходит, любая помощь приветствуется.

Основная деятельность//

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_li_summary);

    getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

        if (savedInstanceState != null)
        {
            if ((savedInstanceState != null) && (savedInstanceState.getSerializable("ts") != null))
            {
                startTime = (Calendar) savedInstanceState.getSerializable("starttime");
                String samp = (String) savedInstanceState.getSerializable("ts");
                refreshTS = (TextView) findViewById(R.id.timeStamp);
                refreshTS.setText(samp);

                String[] values = savedInstanceState.getStringArray("listItems");
                if (values != null) {
                    for (int i = 0; i< values.length; i++) {
                        mMainListAdapter.add(values[i]);
                    }
                }
            }

        }
}

savedInstance //

@Override
protected void onSaveInstanceState(Bundle state) {

    super.onSaveInstanceState(state);
    state.putSerializable("starttime", startTime);
    state.putSerializable("ts",refreshTS.getText().toString());

    ArrayList<String> values = new ArrayList<String>() ;
    for (int i =0; i< mMainListAdapter.getCount(); i++)
    {
        String obj = mMainListAdapter.getItem(i);
        values.add(obj);
    }

    state.putStringArrayList("listItems", values);
}

Трассировки стека//

06-05 07:27:08.394  13901-13901/commyapp.myapp W/Bundle﹕ Attempt to cast generated internal exception:
    java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String[]
            at android.os.Bundle.getStringArray(Bundle.java:1565)
            at commyapp.myapp.Summary.onCreate(Summary.java:90)
            at android.app.Activity.performCreate(Activity.java:5600)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2504)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2599)
            at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4218)
            at android.app.ActivityThread.access$1000(ActivityThread.java:174)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1327)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:146)
            at android.app.ActivityThread.main(ActivityThread.java:5748)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
            at dalvik.system.NativeStart.main(Native Method)

1 ответ

Решение

На onSaveInstanceState вы храните ArrayList<String> за listItems, но при получении listItems ты используешь getStringArray("listItems") который возвращает String[],

Извлечь listItems Вы должны использовать следующее:

ArrayList<String> values = savedInstanceState.getStringArrayList("listItems");
Другие вопросы по тегам