2015-06-05 31 views
0

我想通过使用savedInstance和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) 
+0

你有ClassNotFoundException的堆栈跟踪? – lordoku

+0

不相关,并且不太可能与崩溃相关,您检查savedInstanceState为空两次,可以删除它。 – Zadrox

+0

您是否正确实现了Serializable? – Gosu

回答

3

onSaveInstanceState你存储的ArrayList<String>listItems,但检索listItems你的时候请使用getStringArray("listItems") h返回String[]

要检索listItems你应该使用下列内容:

ArrayList<String> values = savedInstanceState.getStringArrayList("listItems"); 
+0

宾果!非常感谢你。 – snapplex