- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个实现Parcelable的Question类,它充当myquiz.db和dbHelper类之间的桥梁。我要做的是在旋转设备后恢复状态。这是onSaveInstanceState()中的代码:
override fun onSaveInstanceState(outState: Bundle?, outPersistentState: PersistableBundle?) {
super.onSaveInstanceState(outState, outPersistentState)
outState?.putInt(KEY_SCORE, score)
outState?.putInt(KEY_QUES_COUNT, questionCounter)
outState?.putBoolean(KEY_ANSWERED, answered)
outState?.putLong(KEY_MILLIS_LEFT, timeLeftInMillis)
outState?.putParcelableArrayList(KEY_QUES_LIST, list)
}
if (savedInstanceState == null) {
val dbHelper = QuizDbHelper(this)
list = dbHelper.getAllQuestions()
totalQuestions = list.size
list.shuffle()
textDefaultColor = rb1.textColors
textDefaultColorcd = timer.textColors
nextQuestion()
} else {
**list = savedInstanceState.getParcelableArrayList(KEY_QUES_LIST)**
totalQuestions = list.size
score = savedInstanceState.getInt(KEY_SCORE)
answered = savedInstanceState.getBoolean(KEY_ANSWERED)
questionCounter = savedInstanceState.getInt(KEY_QUES_COUNT)
currQuestion = list[questionCounter - 1]
timeLeftInMillis = savedInstanceState.getLong(KEY_MILLIS_LEFT)
if (!answered) {
startTimer()
} else {
updateCoundownText()
correctAnswer()
}
}
java.lang.IllegalStateException: savedInstanceState.getPa…eArrayList(KEY_QUES_LIST) must not be null
第一行。另外,当我将鼠标指针悬停在此行时,它显示:
Required:
ArrayList<Question>
Found:
ArrayList<Question!>?
private lateinit var list: ArrayList<Question>
class Question() : Parcelable {
private lateinit var question: String
private lateinit var option1: String
private lateinit var option2: String
private lateinit var option3: String
private var answerNr = 0
constructor(question: String, option1: String, option2: String, option3: String, answerNr: Int) : this() {
this.question = question
this.option1 = option1
this.option2 = option2
this.option3 = option3
this.answerNr = answerNr
}
constructor(parcel: Parcel) : this() {
parcel.readString()
parcel.readString()
parcel.readString()
parcel.readString()
parcel.readInt()
}
fun getQuestion(): String? {
return question
}
fun setQuestion(question: String) {
this.question = question
}
fun getOpt1(): String? {
return option1
}
fun setOpt1(option1: String) {
this.option1 = option1
}
fun getOpt2(): String? {
return option2
}
fun setOpt2(option2: String) {
this.option2 = option2
}
fun getOpt3(): String? {
return option3
}
fun setOpt3(option3: String) {
this.option3 = option3
}
fun getAnswerNo(): Int {
return answerNr
}
fun setAnswerNo(answerNr: Int) {
this.answerNr = answerNr
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(question)
parcel.writeString(option1)
parcel.writeString(option2)
parcel.writeString(option3)
parcel.writeInt(answerNr)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<Question> {
override fun createFromParcel(parcel: Parcel): Question {
return Question(parcel)
}
override fun newArray(size: Int): Array<Question> {
return newArray(size)
}
}
最佳答案
在onSaveInstanceState方法中,您首先要调用super,然后再存储状态。因此list始终为null,并且您已将列表声明为不可为null,因此将引发异常。
更新代码:
override fun onSaveInstanceState(outState: Bundle?, outPersistentState: PersistableBundle?) {
outState?.putInt(KEY_SCORE, score)
outState?.putInt(KEY_QUES_COUNT, questionCounter)
outState?.putBoolean(KEY_ANSWERED, answered)
outState?.putLong(KEY_MILLIS_LEFT, timeLeftInMillis)
outState?.putParcelableArrayList(KEY_QUES_LIST, list)
super.onSaveInstanceState(outState, outPersistentState)
}
关于android - 从SavedInstanceState获取自定义类型的列表时获取IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62369005/
相当简单的问题,但我无法在任何地方找到明确的答案。 fragment 的savedInstanceState和 fragment 的父activity(或封装 fragment )的savedInst
我在获取 Activity 状态时遇到问题。我有 2 个 Activity :MainActivity 和 Activity2。在 MainActivity 中,我放了一个 editText 和一个
我想在与另一台设备“同步”时获取当前系统时间。因此,此 Activity 通常在同步后立即调用/显示。 目前,当前系统时间是正确的,但我还弹出另一个 Activity 的警报,一旦我完成该 Activ
在 Google Api 示例代码中,他们有一个关于保存状态的非常简单的示例。我需要这个来处理屏幕旋转。 我的问题是我不明白方法 getSavedText() 和 setSaveText() 是从哪里
我有一个秒表应用程序,它只有一项 Activity 。三个按钮启动、停止、重置和一个显示计时器的 TextView 。这是我的代码: public class StopwatchActivity ex
我有一个 ViewPager,其中包含用户输入不同输入的一些 fragment 。其中一个 fragment 包含一个 DatePicker 和一个 TimePicker ,我将其存储(当用户选择了日
如果我没有显式调用 onSaveInstanceState(),当 onCreate 中的 savedInstanceState 不为 null 时,这是可能的吗? 我看到一个选项,当系统在崩溃后重新
所以我的 OnsavedInstanceState 中有这段代码 @Override public void onSaveInstanceState(Bundle savedInstanceState
我正在制作一个 Android 应用程序,但我一直遇到一个奇怪的错误。游戏结束后,如果您点击手机上的“返回”按钮,您将回到完成的游戏并继续玩!! 如何防止这种情况发生?有没有办法删除之前的SavedI
我刚开始使用 Android,我遇到了以下问题: 我正在尝试在打开新 Activity 时保存 InstanceState,并且我需要在 Activity 返回可见状态时恢复该状态。 这是我的 onS
在我的主要 Activity 中有一些代码说 if (savedInstanceState != null) { mCurrentSelectedPosition = save
我是 Android 的新手,我在使用 savedInstanceState 和管理生命周期时遇到了一些麻烦。 http://developer.android.com/guide/topics/fu
我有以下情况: Activity A 启动 Activity B Activity A 调用 onPause、onSaveInstanceState 和 onStop 方法。 在 Activity B
据我了解,Activity 会自动保存 View 的状态,而 EditText 和 TextView 之类的东西会自动恢复它们的状态。 这不适用于可见性吗? 例如:如果默认情况下在 XML 中,我有一
我是 Android 开发的新手,但我对 OOP 概念有一些了解。我正在尝试从 Java 的角度学习 Android。 我了解到第9行onCreate()里面的savedInstanceState是B
因此,Activity.onCreate() 将一个Bundle 作为参数,默认情况下它被称为savedInstanceState。 savedInstanceState 是否在应用更新到较新版本时保
这是我保存的InstaceState 代码: @Override public void onSaveInstanceState(Bundle savedInstanceState) { sa
我在 ViewPager 中有一个 fragment 。 Fragment 包含一个 RecyclerView(想想 ListView)。当用户离开然后返回到 fragment 时,无论用户离开列表的
我只是想通过这个简单的例子来了解 Activity 的生命周期,方法是找出如何取回 SomeIntegers g_values 对象和其中的 ArrayList AnInteger 对象。 事实上,它
我正在使用 onSaveInstanceState 方法来存储和检索 fragment 内的局部变量。我的一个 fragment 中有以下代码(简化): private final SimpleDat
我是一名优秀的程序员,十分优秀!