繁体   English   中英

无法将TextView强制转换为java.io.Serializable

[英]Cannot cast TextView to java.io.Serializable

在将布局更改为其他布局或更改屏幕方向时,我试图保存我的文本视图状态:

 @Override
public void onSaveInstanceState(Bundle outState) {
  super.onSaveInstanceState(outState);
  outState.putSerializable("GeneratedNumber", (Serializable) generatedNumber);//I get the error here

}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  generatedNumber = (TextView) savedInstanceState.getSerializable("GeneratedNumber");

}

但我得到一个错误

java.lang.ClassCastException:android.support.v7.widget.AppCompatTextView无法转换为java.io.Serializable

同样GeneratedNumber:是XML文件中的generatedNumber TextView ID。 这是日志:

09-07 18:33:41.478 9406-9406 / maskedman.counter E / AndroidRuntime:致命例外:主进程:maskedman.counter,PID:9406 java.lang.ClassCastException:android.support.v7.widget.AppCompatTextView到位于maskedman.counter.CounterActivity.onSaveInstanceState(CounterActivity.java:34)的java.io.Serializable在android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1317)在android.app.Activity.performSaveInstanceState(Activity.java:1474)在)于android.app.ActivityThread.callCallActivityOnSaveInstanceState(ActivityThread.java:5393)于android.app.ActivityThread.performStopActivityInner(ActivityThread.java:4695)于android.app.ActivityThread.handleStopActivity(ActivityThread.java:4769)于android.app .android.app.ActivityThread.access $ 1400(ActivityThread.java:221).android.os.Handler.dispatchMessage(Handler.java:102).ActivityThread $ H.handleMessage(ActivityThread.java:1823) .loop(Looper.java:158)位于android.app.ActivityThread.main( 位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1230)处的java.lang.reflect.Method.invoke(本机方法)处的ActivityThread.java:7224) ZygoteInit.main(ZygoteInit.java:1120)

有谁能够帮助我 ?

问题是您尝试将文本视图存储为可序列化的,这是错误的。

检查一下:

@Override
public void onSaveInstanceState(Bundle outState) {
  super.onSaveInstanceState(outState);
  // Save UI state changes to the savedInstanceState.
  // This bundle will be passed to onCreate if the process is
  // killed and restarted.
  savedInstanceState.putInt("GeneratedNumber", generatedNumber);// generatedNumber is integer
  // etc.
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  generatedNumber = savedInstanceState.getInt("GeneratedNumber");

}

/** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    /** 
*
*  layout initailization
*/
    if (savedInstanceState != null) {
       mTextView.setText(String.valueOf(generatedNumber));
    } 

  }

希望这对您有用。

尝试仅将textview的值另存为字符串,然后将其再次放入onRestoreInstanceState

在onSaveInstanceState中尝试:

outState.putString("GeneratedNumber", yourTextView.getText().toString);

在onRestoreInstanceState中,尝试:

String generatedNumber = savedInstanceState.getString("GeneratedNumber");
yourTextView.setText(generatedNumber);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM