Невозможно преобразовать TextView в 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 cannot be cast to java.io.Serializable

Также GeneratedNumber: это идентификатор TextView generatedNumber в XML-файле. Это журнал:

09-07 18:33:41.478 9406-9406/maskedman.counter E/AndroidRuntime: FATAL EXCEPTION: main Process: maskedman.counter, PID: 9406 java.lang.ClassCastException: android.support.v7.widget.AppCompatTextView cannot be cast to java.io.Serializable at maskedman.counter.CounterActivity.onSaveInstanceState(CounterActivity.java:34) at android.app.Activity.performSaveInstanceState(Activity.java:1474) at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1317) at android.app.ActivityThread.callCallActivityOnSaveInstanceState(ActivityThread.java:5393) at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:4695) at android.app.ActivityThread.handleStopActivity(ActivityThread.java:4769) at android.app.ActivityThread.access$1400(ActivityThread.java:221) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1823) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7224) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
685
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Проверь это :

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

  }

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

Он работает при изменении ориентации экрана, если я использую .setText в onRestoreInstanceState (), но не при выходе из макета и последующем возвращении. Вы можете мне еще помочь?

Mike 07.09.2018 19:54

покидание макета означает, что вы закончите действие, а затем вернетесь с намерением выполнить то же самое, ПРАВИЛЬНО? если да, тогда onRestoreInstanceState не работает, вам нужно установить данные с помощью метода getIntent ().

Sunny 08.09.2018 10:25

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

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

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

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

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

Другие вопросы по теме