- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个扩展 CoordinatorLayout 的自定义 View 我正在重写 onRestoreInstanceState
和 onSaveInstanceState
使用类扩展 BaseSavedState 的典型方式.当我的观点恢复时,我得到:
Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.design.widget.CoordinatorLayout$SavedState
at android.os.Parcel.readParcelableCreator(Parcel.java:2432)
at android.os.Parcel.readParcelable(Parcel.java:2358)
at android.view.AbsSavedState.(AbsSavedState.java:57)
at android.view.View$BaseSavedState.(View.java:21457)
at android.support.design.widget.CoordinatorLayout$SavedState.(CoordinatorLayout.java:2656)
如果我评论我的两个方法 onRestoreInstanceState
和 onSaveInstanceState
这个问题就解决了。请参阅下面的自定义 View 代码:
@Override
protected Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
SavedState ss = new SavedState(superState);
ss.scrollX = scrollView.getScrollX();
ss.scrollY = scrollView.getScrollY();
return ss;
}
@Override
protected void onRestoreInstanceState(Parcelable state) {
if (!(state instanceof SavedState)) {
super.onRestoreInstanceState(state);
return;
}
final SavedState ss = (SavedState) state;
super.onRestoreInstanceState(ss.getSuperState());
post(() -> scrollView.scrollTo(ss.scrollX, ss.scrollY));
}
static class SavedState extends BaseSavedState {
int scrollX;
int scrollY;
SavedState(Parcelable superState) {
super(superState);
}
private SavedState(Parcel in) {
super(in);
this.scrollX = in.readInt();
this.scrollY = in.readInt();
}
@Override
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeInt(this.scrollX);
out.writeInt(this.scrollY);
}
//required field that makes Parcelables from a Parcel
public static final Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() {
public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
}
public SavedState[] newArray(int size) {
return new SavedState[size];
}
};
}
最佳答案
这是因为 AbsSavesState
使用了一个 null
类加载器所以你必须自己序列化它:
@Override
protected Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
SavedState ss = new SavedState(superState);
ss.scrollX = scrollView.getScrollX();
ss.scrollY = scrollView.getScrollY();
return ss;
}
@Override
protected void onRestoreInstanceState(Parcelable state) {
if (!(state instanceof SavedState)) {
super.onRestoreInstanceState(state);
return;
}
final SavedState ss = (SavedState) state;
super.onRestoreInstanceState(ss.superState);
post(() -> scrollView.scrollTo(ss.scrollX, ss.scrollY));
}
static class SavedState extends BaseSavedState {
Parcelable superState;
int scrollX;
int scrollY;
SavedState(Parcelable superState) {
// We store the state ourself and send an empty state to to the parent
super(EMPTY_STATE);
this.superState = superState;
}
private SavedState(Parcel in) {
super(in);
this.superState = in.readParcelable(CoordinatorLayout.SavedState.class.getClassLoader());
this.scrollX = in.readInt();
this.scrollY = in.readInt();
}
@Override
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeParcelable(superState, flags);
out.writeInt(this.scrollX);
out.writeInt(this.scrollY);
}
//required field that makes Parcelables from a Parcel
public static final Parcelable.Creator CREATOR =
new Parcelable.Creator() {
public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
}
public SavedState[] newArray(int size) {
return new SavedState[size];
}
};
}
关于android - BadParcelableException ClassNotFoundException CoordinatorLayout$SavedState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35946908/
我在尝试传递 Parcelable 时遇到此错误通过 Intent .基本上,我已经将我的类(class)实现为 Parcelable ,但我无法将该对象传递给另一个 Activity ,因为它在读取
我的 Activity 允许用户选择地理范围,并通过 setResult 函数返回它们: public class MyActivity extends Activity . . buttonOk
运行稍加修改的 Google map 示例会在 Google map 代码中引发 BadParcelableException。 LatLng 类是 parcelable 但找不到。谷歌地图代码似乎试
我遇到了著名的 BadParcelableException,但我看不出问题出在哪里,这是我的 Parcelable 类: public class PaymentInfoViewModel impl
我对 Serializable 和 Parcelable 很陌生。我很难将此对象的实例从应用程序传递到远程服务: public class Event implements Parcelable, C
我有一个扩展 CoordinatorLayout 的自定义 View 我正在重写 onRestoreInstanceState 和 onSaveInstanceState 使用类扩展 BaseSave
这个错误似乎偶尔会发生,这很奇怪。它通常工作正常,但偶尔会爬起来。这是我的代码,它在 BroadcastReceiver 中: public void onReceive(Context contex
我不知道为什么会这样,我无法重现它。它在控制台中。 我真的很抱歉只输入了代码和日志猫,但我什至无法阅读日志猫,我之前没有遇到过这样的问题,我什至不知道从哪里开始。任何帮助将不胜感激。 这是日志猫, a
我有一个名为 AllStatStruct 的类。这个类包含三个属性,它们是我的类 StatStructCycle、StatStructHistory 和 MatrixStruct 的对象。每个类都扩展
值正在传递并且执行正常,但我看到这些被抛出到 logcat 中,我想消除它们,我检查了旧论坛但没有具体说明。我在下面发布我的代码,请告诉我为什么会不会出现这个问题 public class Execu
我一直在做一项任务,围绕为游戏《三十》(Yatzy 的一个变体)创建一个较小的应用程序。虽然我的 Parcelables 收到一些错误消息。该错误是根据 GameHandler 或 GameRound
我使用联系人选择器获取特定联系人的姓名。对于 Eclair 和后来我使用: startActivityForResult(new Intent(Intent.ACTION_PICK, Contacts
在 Firebase 中,我的生产应用程序(使用 Dexguard)在使用 Parcelable 时遇到了各种崩溃。 . 这些崩溃现在影响了近 200 名用户,并在 Firebase 上分为 3 个条
我在尝试从 Bundle 中检索时看到(不经常 - 很少 = cca 1/1000 次)BadParcelableException。 有人知道为什么会这样吗?我认为它应该总是发生,或者永远不会发生,
[错误] Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mypacka
3 天前我已经迁移到 SDK Android 27.1.0,并且有一些像这样的崩溃,我不明白为什么。它(目前)出现在 Android 8 和 6 上。 BadParcelableException C
我的 android 应用程序的生产 apk 中出现以下异常已有 1 天了: java.lang.RuntimeException: Unable to start activity Componen
给定一个自定义类 org.example.app.MyClass implements Parcelable ,我想写一个List到一个包裹。我做了编码 List myclassList = ...
向 YouTube Android Player API 库工程师提交错误:请参阅 android-youtube-api 标签 在过去的一周半中,我注意到这个奇怪的 BadParcelableExc
向 YouTube Android Player API 库工程师提交错误:查看 android-youtube-api 标签 在过去一周半的时间里,我注意到这个奇怪的 BadParcelableEx
我是一名优秀的程序员,十分优秀!