gpt4 book ai didi

java - 从 Bundle getParcelable 有时会导致 java android 中的 BadParcelableException

转载 作者:太空宇宙 更新时间:2023-11-04 10:13:04 26 4
gpt4 key购买 nike

[错误]

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mypackage/folders.views.activity.MainActivity$17}: 
android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class

我从以下代码中得到了 BadParcelableException,但不知道为什么会得到这个。我在 fragment 的 onCreateView 中调用此代码。神秘的是它不会一直崩溃。我现在完全无助了。如果您有一些提示或示例,我很乐意收到您的来信!

final BigItem bigItem = getArguments().getParcelable("big_item"); ← I get error at this code

我将 Parcelable 放入此函数的 budle 中,但我不认为这是原因。

public static BigFragment newInstance(@NonNull final BigItem bigItem, @NonNull final BigListener eventListener) {
final BigFragment frag = new BigFragment();
Bundle args = new Bundle();
args.putParcelable("big_item", bigItem);
frag.setArguments(args);
return frag;
}

这是BigItem的代码如下。

public class BigItem implements Parcelable {


public long id;

public String image;

public String text;

public String web;

public BigItem() {

}

protected BigItem(Parcel in) {
id = in.readLong();
image = in.readString();
text = in.readString();
web = in.readString();
}

public static final Creator<BigItem> CREATOR = new Creator<BigItem>() {
@Override
public BigItem createFromParcel(Parcel in) {
return new BigItem(in);
}

@Override
public BigItem[] newArray(int size) {
return new BigItem[size];
}
};

@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel par, int flags) {
par.writeLong(id);
par.writeString(image);
par.writeString(text);
par.writeString(web);
}
}

以下 FragmentTransaction 方法位于我的 MainActivity 中

private void addBigFragment(@NonNull final BigItem bigItem, @NonNull final BigFragment.BigEventListener eventListener) {
final FragmentManager fragmentManager = getSupportFragmentManager();
rmBigFragment(fragmentManager);

final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
mBigFragment = BigFragment.newInstance(bigItem, eventListener);
fragmentTransaction.replace(R.id.main_big_layout_fragment, mBigFragment, BigFragment.TAG);
fragmentTransaction.commit();
}

最佳答案

可能与本文重复:How to use Parcelable in fragment for getting data?

我看了你的代码,没有发现错误。你说“它不会一直崩溃”,让我明白你没有插入异常。如果是我,我会写;

Bundle bundle = getArguments();
if (bundle != null) {
BigItem bigItem = bundle.getParcelable("big_item");
}

因为有时 fragment 会在没有参数的情况下恢复。

关于java - 从 Bundle getParcelable 有时会导致 java android 中的 BadParcelableException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52088168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com