Невозможно привести TextView к java.io.Serializable - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь сохранить свое состояние просмотра текста при изменении макета, в котором он находится, на другой макет или при изменении ориентации экрана:

 @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: это generatedNumber идентификатор TextView в файле XML. Это журнал:

09-07 18: 33: 41.478 9406-9406 / maskedman.counter E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное Процесс: maskedman.counter, PID: 9406 java.lang.ClassCastException: android.support.v7.widget.AppCompatTextView не может быть приведен к java.io.Serializable at maskedman.counter.CounterActivity.onSaveInstanceState (CounterActivity.java:34) на android.app.Activity.performSaveInstanceState (Activity.java:1474) на android.app.Instrumentation.callActivityOnSaveInstanceState (Instrumentation.java:1317) на android.app.ActivityThread.callCallActivityOnSaveInstanceState (ActivityThread.java:5393) на android.app.ActivityThread.performStopActivityInner (ActivityThread.java:4695) на android.app.ActivityThread.handleStopActivity (ActivityThread.java:4769) на android.app.ActivityThread.access $ 1400 (ActivityThread.java:221) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1823) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:158) на android.app.ActivityThread.main (ActivityThread.java:7224) в java.lang.reflect.Method.invoke (родной метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1230) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120)

Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Попробуйте сохранить только значение textview в виде строки и снова поместить его в onRestoreInstanceState

В onSaveInstanceState попробуйте:

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

В onRestoreInstanceState попробуйте:

String generatedNumber = savedInstanceState.getString("GeneratedNumber");
yourTextView.setText(generatedNumber);
0 голосов
/ 07 сентября 2018

Проблема в том, что вы пытаетесь сохранить текстовое представление как сериализуемое, что неправильно.

Проверьте это:

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

  }

Я надеюсь, что это работает для вас.

...