ClassCastException xảy ra ngẫu nhiên để khôi phục Vector trong onRestoreInstanceState(). Nói chung khôi phục vectơ đã hoàn thành tốt, nhưng đôi khi ngoại lệ xảy ra.ClassCastException xảy ra trong onRestoreInstanceState
Tôi nghĩ điều đó xảy ra khi hoạt động được chuyển sang nền và bị phá hủy nhưng tôi không chắc chắn.
Bất kỳ ý tưởng nào? Cảm ơn bạn.
Stack<LocationInfo> mLocationInfoVector;
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putSerializable("locationInfos", mLocationInfoVector);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (savedInstanceState.getSerializable("locationInfos") != null) {
@SuppressWarnings("unchecked")
mLocationInfoVector= (Stack<LocationInfo>) savedInstanceState.getSerializable("locationInfos");
}
super.onRestoreInstanceState(savedInstanceState);
}
thêm:
tôi quên đính kèm bản ghi ngoại lệ. Đó là
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Stack
Tôi đề nghị bạn viết lại phương thức 'onRestoreInstanceState' như sau:' Object saved = savedInstanceState.getSerializable ("locationInfos"); if (lưu instanceof Stack) {mLocationInfoVector = (Stack) được lưu; } else if (lưu! = null) {Log.e ("RestoreBug", "Lớp đối tượng được khôi phục:" + saved.getClass(). getName()); } 'Sau đó, bạn ít nhất có thể thấy những gì bạn đang nhận được trở lại. (Xin lỗi vì đã đăng bài trong một bình luận; Tôi không muốn đăng bài này như là một câu trả lời). –
Tôi nghĩ theo cách đó, nhưng tôi thực sự muốn biết cơ chế nào tạo ra trường hợp này. Tôi đã thêm nhật ký ngoại lệ và tôi không biết tại sao loại đối tượng được thay đổi thành ArrayList. – chris
Có khả năng siêu lớp hoạt động của bạn ghi đè lên 'onSaveInstanceState' không? Tôi đang tự hỏi nếu bạn đang sử dụng '" locationInfos "' chìa khóa bất cứ nơi nào khác trong mã của bạn. (P.S. trong mọi trường hợp, bạn nên tổ chức lại mã 'onRestoreInstanceState' để nó chỉ gọi' getSerializable() 'một lần.) –