【问题标题】:Parcelable encountered IOException writing serializable object on Intent putExtraParcelable 在 Intent putExtra 上写入可序列化对象时遇到 IOException
【发布时间】:2016-12-29 09:39:33
【问题描述】:

我正在构建一个应用程序,我必须在其中通过Intent 传递List<Object>

我的代码:

public class ObjectModelWrapper implements Serializable{

    private List<Object> objectModel;

    public ObjectModelWrapper(List<Object> objectModel) {
        this.objectModel = objectModel;
    }

    public List<Object> getObjectModel() {
        return objectModel;
    }
}

这是我尝试通过Intent传递的数据:

holder.categoryAction.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                firstSix = new ArrayList<>();
                newList = new ArrayList<>();
                if (items.get(position).getGames().size() > 12) {
                    firstSix.addAll(items.get(position).getGames().subList(0, 6));
                    newList.add(firstSix);
                    newList.add(items.get(position).getBannerImage());
                    newList.add(items.get(position).getGames().subList(6, items.get(position).getGames().size()));
                }else if (items.get(position).getGames().size() > 8 && items.get(position).getGames().size() < 12) {
                    firstSix.addAll(items.get(position).getGames().subList(0, 6));
                    newList.add(firstSix);
                    newList.add(items.get(position).getBannerImage());
                    newList.add(items.get(position).getGames().subList(6, items.get(position).getGames().size()));
                }else if (items.get(position).getGames().size() > 3 && items.get(position).getGames().size() < 8) {
                    firstSix.addAll(items.get(position).getGames().subList(0, 3));
                    newList.add(firstSix);
                    newList.add(items.get(position).getBannerImage());
                    newList.add(items.get(position).getGames().subList(3, items.get(position).getGames().size()));
                }else {
                    firstSix.addAll(items.get(position).getGames().subList(0, 1));
                    newList.add(firstSix);
                    newList.add(items.get(position).getBannerImage());
                    newList.add(items.get(position).getGames().subList(1, items.get(position).getGames().size()));
                }
                ObjectModelWrapper wrapper = new ObjectModelWrapper(newList);

                for (int i=0; i< firstSix.size(); i++){
                    Log.e("GAME NAME FIRST SIX", firstSix.get(i).getName());
                }

                for (int i=0; i< newList.size(); i++){
                    Log.e("GAME NAME NEW LIST", newList.get(i).toString());
                }
                Intent intent = new Intent(context, CategoryInfo.class);
                intent.putExtra("categoryColor", items.get(position).getCategoryLineColor());
                intent.putExtra("categoryBanner", items.get(position).getBannerImage());
                intent.putExtra("categoryName", items.get(position).getCategoryName());
                intent.putExtra("customList", wrapper);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent);
            }
        });

新列表是:

private transient List<Object> newList;

我知道这可能是因为Object 没有实现Serializable。我该如何解决?

logcat 输出:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.realtimegaming.network.models.ObjectModelWrapper)
                                                                                                  at android.os.Parcel.writeSerializable(Parcel.java:1527)
                                                                                                  at android.os.Parcel.writeValue(Parcel.java:1475)
                                                                                                  at android.os.Parcel.writeArrayMapInternal(Parcel.java:724)
                                                                                                  at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408)
                                                                                                  at android.os.Bundle.writeToParcel(Bundle.java:1157)
                                                                                                  at android.os.Parcel.writeBundle(Parcel.java:764)
                                                                                                  at android.content.Intent.writeToParcel(Intent.java:8687)
                                                                                                  at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3082)
                                                                                                  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1518)
                                                                                                  at android.app.Activity.startActivityForResult(Activity.java:4225)
                                                                                                  at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50)
                                                                                                  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79)
                                                                                                  at android.app.Activity.startActivityForResult(Activity.java:4183)
                                                                                                  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)
                                                                                                  at android.app.Activity.startActivity(Activity.java:4522)
                                                                                                  at android.app.Activity.startActivity(Activity.java:4490)
                                                                                                  at adapters.LobbyAdapter$1.onClick(LobbyAdapter.java:114)
                                                                                                  at android.view.View.performClick(View.java:5637)
                                                                                                  at android.view.View$PerformClick.run(View.java:22429)
                                                                                                  at android.os.Handler.handleCallback(Handler.java:751)
                                                                                                  at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                                  at android.os.Looper.loop(Looper.java:154)
                                                                                                  at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
                                                                                               Caused by: java.io.NotSerializableException: java.util.ArrayList$SubList
                                                                                                  at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1224)
                                                                                                  at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
                                                                                                  at java.util.ArrayList.writeObject(ArrayList.java:734)
                                                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                                                  at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:977)
                                                                                                  at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1536)
                                                                                                  at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1472)
                                                                                                  at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1218)
                                                                                                  at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1584)
                                                                                                  at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1549)
                                                                                                  at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1472)
                                                                                                  at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1218)
                                                                                                  at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
                                                                                                  at android.os.Parcel.writeSerializable(Parcel.java:1522)
                                                                                                  at android.os.Parcel.writeValue(Parcel.java:1475) 
                                                                                                  at android.os.Parcel.writeArrayMapInternal(Parcel.java:724) 
                                                                                                  at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408) 
                                                                                                  at android.os.Bundle.writeToParcel(Bundle.java:1157) 
                                                                                                  at android.os.Parcel.writeBundle(Parcel.java:764) 
                                                                                                  at android.content.Intent.writeToParcel(Intent.java:8687) 
                                                                                                  at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3082) 
                                                                                                  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1518) 
                                                                                                  at android.app.Activity.startActivityForResult(Activity.java:4225) 
                                                                                                  at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50) 
                                                                                                  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79) 
                                                                                                  at android.app.Activity.startActivityForResult(Activity.java:4183) 
                                                                                                  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859) 
                                                                                                  at android.app.Activity.startActivity(Activity.java:4522) 
                                                                                                  at android.app.Activity.startActivity(Activity.java:4490) 
                                                                                                  at adapters.LobbyAdapter$1.onClick(LobbyAdapter.java:114) 
                                                                                                  at android.view.View.performClick(View.java:5637) 
                                                                                                  at android.view.View$PerformClick.run(View.java:22429) 
                                                                                                  at android.os.Handler.handleCallback(Handler.java:751) 
                                                                                                  at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                                                  at android.os.Looper.loop(Looper.java:154) 
                                                                                                  at android.app.ActivityThread.main(ActivityThread.java:6119)

【问题讨论】:

  • 也添加崩溃日志
  • 您可能是对的,问题在于object 不可序列化。创建自己的可序列化类,并从它继承。
  • 你能发布你的items模型类吗?
  • 它实现了可序列化

标签: java android android-intent serialization


【解决方案1】:

为什么在列表中使用 Object?尝试为列表的所有对象创建一个基类,并为详细信息创建继承类。然后,在每个类中,您都可以实现自己的 Parcelable

【讨论】:

  • 我使用Object,因为如您所见,我想添加一个List&lt;GameList&gt;,然后是String,然后是另一个List&lt;GameList&gt;
  • GameList 中有什么?或许,代替List,尝试使用一些HashMap,以String为key?
猜你喜欢
  • 2013-04-30
  • 2020-07-22
  • 2014-08-03
  • 2013-08-11
  • 2018-01-02
  • 2016-01-25
  • 2014-06-02
相关资源
最近更新 更多