【发布时间】:2020-10-26 11:27:09
【问题描述】:
我在安装新代码并运行它时遇到了这个崩溃,下面我附上了旧代码和新代码。请让我知道我们该如何解决这些问题?
旧代码:
// data class
public class X {
int val;
....
....
}
public final HelperClass {
static Bundle toBundle(X obj) {
toDataMap(obj).toBundle();
}
static DataMap toDataMap(X obj) {
DataMap dataMap = new DataMap();
dataMap.putInt("id", obj.val);
....
....
return dataMap;
}
}
// used in an activity on a onClick
context.startActivity(new Intent(ACTION_VIEW)
.putExtra(X_INSTANCE_EXTRA, HelperClass.toBundle(new X())));
// received in the activity started by the intent
X obj = bundle.getBundle(X_INSTANCE_EXTRA);
新代码:
// data class
public class X implements Parcelable {
int val;
....
....
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(val);
...
...
}
public static final Parcelable.Creator<X> CREATOR =
new Parcelable.Creator<X>() {
@Override
public X createFromParcel(Parcel in) {
X obj = new X();
x.val = in.readInt();
...}
};
}
// used in an activity on a onClick
context.startActivity(new Intent(ACTION_VIEW)
.putExtra(X_INSTANCE_EXTRA, new X());
// received in the activity started by the intent
X obj = intent.getParcelableExtra(X_INSTANCE_EXTRA);
我在新代码的最后一行得到错误说明
java.lang.ClassCastException: android.os.Bundle cannot be cast to X
是否因为某些意图在旧代码上触发并在新代码中接收?
【问题讨论】:
-
看起来像。您是否在新旧代码之间卸载并重新安装了您的应用?
-
但是我不希望我的用户面临这种崩溃,有没有办法处理这种向后兼容性?
-
所以用户有旧代码的版本,您想更新到新代码?
-
你总是遇到这种崩溃吗?如果您卸载旧代码并安装新代码会发生什么。你还遇到崩溃吗?
-
假设用户通过无线方式获取下一个更新,他们可能会遇到此崩溃,但重启后会消失
标签: android android-intent bundle android-pendingintent classcastexception