天道酬勤,学无止境

Parceable encountered IOException writing serializable object

I am getting this error :

                FATAL EXCEPTION: main
        java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = game.Level)
        at android.os.Parcel.writeSerializable(Parcel.java)
        at android.os.Parcel.writeValue(Parcel.java)
        at android.os.Parcel.writeMapInternal(Parcel.java)
        at android.os.Bundle.writeToParcel(Bundle.java)
        at android.os.Parcel.writeBundle(Parcel.java)
        at android.content.Intent.writeToParcel(Intent.java)
        at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java)
        at android.app.Instrumentation.execStartActivity(Instrumentation.java)
        at android.app.Activity.startActivityForResult(Activity.java)
        at android.app.Activity.startActivityForResult(Activity.java)
        at android.app.Activity.startActivity(Activity.java)
        at android.app.Activity.startActivity(Activity.java)
        at menu.AreaAdapter$1.onClick(AreaAdapter.java:93)
        at android.view.View.performClick(View.java)
        at android.view.View$PerformClick.run(View.java)
        at android.os.Handler.handleCallback(Handler.java)
        at android.os.Handler.dispatchMessage(Handler.java)
        at android.os.Looper.loop(Looper.java)
        at android.app.ActivityThread.main(ActivityThread.java)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
        at dalvik.system.NativeStart.main(Native Method)
        Caused by: java.io.NotSerializableException: menu.AreaActivity
        at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)
        at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
        at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
        at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
        at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
        at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
        at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)

When running this :

holder.butArea.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent myIntent = new Intent(v.getContext(), game.LevelActivity.class);
                myIntent.putExtra("switchlevel", LevelSwitchCase.getLevel(currentLevel, (pos+1),mContext));
                myIntent.putExtra("level",currentLevel);
                myIntent.putExtra("area", (pos+1));

                v.getContext().startActivity(myIntent);

            }
        });

game.level is implementing serializable and getting the error when launching the intent (v.getContext().startActivity(myIntent);)

level and area are just integers and switchlevel is a level I am getting (implements Serializable)

评论

Context is not Serializable. To fix this error I declared Context like this(variable doesnt serialize) :

  public transient Context mContext;

or you can implement Parceable.

For those who use context or other non-serializable objects inside an interface. Simply pass it as a parameter to a method, for instance:

public interface OnActionInterface {
    void onPositiveButtonClicked(Activity activity);
    void onNegativeButtonClicked(Activity activity);
}

Then create a standalone class like:

public class SomeClass implements OnActionInterface, Serializable {
    private String action;

    public SomeClass(String action) {
        this.action = action;
    }

    @Override
    public void onPositiveButtonClicked(Activity activity) {
        Intent intent = new Intent(action);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        activity.startActivity(intent);
    }

    @Override
    public void onNegativeButtonClicked(Activity activity) {
        activity.finish();
    }
}

After that you can use objects of this class inside intents.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 在 android 中将日期值写入 Parceable 类时需要帮助(Require Help while writing Date Value to Parceable Class in android)
    问题 在 Android 中将日期值写入 Parceable 类时,我们收到空指针异常。 我们想知道将日期值写入 Parceable 类的正确方法是什么 这是 Parceable 类的代码 import java.io.Serializable; import java.util.Calendar; import java.util.Date; import com.pregnancycompanionapp.companion.R; import android.os.Parcel; import android.os.Parcelable; /** * DAO for the expecting mother. * * @author Magnus Dahl */ public class Mommy implements Parcelable, Serializable { private static final long serialVersionUID = 1L; private Date mDueDate = Calendar.getInstance().getTime(); private int mMode = Utils.LAST_PERIOD_DAYS; private int mAge; private int mWeightPounds; private
  • 可打包遇到IOException,正在编写可序列化的对象getactivity()(Parcelable encountered IOException writing serializable object getactivity())
    问题 所以我在logcat中得到这个: java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.resources.student_list.Student) 我知道这意味着我的学生课无法序列化,但是,这是我的学生课: import java.io.Serializable; public class Student implements Comparable<Student>, Serializable{ private static final long serialVersionUID = 1L; private String firstName, lastName; private DSLL<Grade> gradeList; public Student() { firstName = ""; lastName = ""; gradeList = new DSLL<Grade>(); } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName =
  • java.lang.RuntimeException:遇到IOException的Parcelable在Android中通过ArrayList对象写入可序列化对象(java.lang.RuntimeException: Parcelable encountered IOException writing serializable object in Android passing ArrayList object)
    问题 我想使用实现Serializable的DataWrapper将ArrayList对象传递给另一个活动。 我遵循此处提供的答案:将用户定义对象的arraylist传递给Intent android。 我从开始另一个活动MPAndroidChart库PieChart的OnChartGestureListener() 这就是我通过ArrayList对象threadList : mChart.setOnChartGestureListener(new OnChartGestureListener() { @Override public void onChartSingleTapped(MotionEvent me) { Intent intent = new Intent(MainActivity.this, TextersSmsActivity.class); intent.putExtra("threadList", new DataWrapper(threadList)); MainActivity.this.startActivity(intent); } //..... } 我实现了DataWrapper类,如下所示: public class DataWrapper implements Serializable { private static final long
  • Parcelable encountered IOException writing serializable object getactivity()
    so I am getting this in logcat: java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.resources.student_list.Student) I know this means that my student class is not serializable, but it is, here is my student class: import java.io.Serializable; public class Student implements Comparable<Student>, Serializable{ private static final long serialVersionUID = 1L; private String firstName, lastName; private DSLL<Grade> gradeList; public Student() { firstName = ""; lastName = ""; gradeList = new DSLL<Grade>(); } public String getFirstName() { return
  • java.lang.RuntimeException: Parcelable encountered IOException writing serializable object in Android passing ArrayList object
    I want to pass my ArrayList object to another activity, using a DataWrapper that implements Serializable. I followed the answer provided here: Pass arraylist of user defined objects to Intent android. I am starting the another Activity from MPAndroidChart library PieChart's OnChartGestureListener(). This is how I passed my ArrayList object threadList: mChart.setOnChartGestureListener(new OnChartGestureListener() { @Override public void onChartSingleTapped(MotionEvent me) { Intent intent = new Intent(MainActivity.this, TextersSmsActivity.class); intent.putExtra("threadList", new DataWrapper
  • Require Help while writing Date Value to Parceable Class in android
    We're getting Null Pointer Exception while writing Date value to Parceable Class in Android. We wanted to know what is the correct way to write Date Value to Parceable class This is the code for the Parceable Class import java.io.Serializable; import java.util.Calendar; import java.util.Date; import com.pregnancycompanionapp.companion.R; import android.os.Parcel; import android.os.Parcelable; /** * DAO for the expecting mother. * * @author Magnus Dahl */ public class Mommy implements Parcelable, Serializable { private static final long serialVersionUID = 1L; private Date mDueDate = Calendar
  • 如何将Bean类的一个活动传递给Android上的另一个活动(How to pass bean class one activity to another activity on android)
    问题 嗨,这是我的listview onClicklister。 当我单击列表项时,我将arraylist从bean类的一个活动传递到另一个活动,如下所示, 但是我想知道我们可以将Bean类传递给下一个活动吗? listViewRoutes.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { RouteBean bean = routeList.get(arg2); ArrayList<Double> fromLatitude = bean.getFromLatitude(); ArrayList<Double> fromLongitude= bean.getFromLongitude(); ArrayList<Double> toLatitude = bean.getToLatitude(); ArrayList<Double> toLongitude= bean.getToLongitude(); Intent intent =new Intent("MapActivityView"); intent.putExtra("fromLon", fromLongitude)
  • 如何在Java中测试类是否正确实现了Serializable(不仅是Serializable的实例)(how to test in Java that a class implements Serializable correctly (not just is an instance of Serializable))
    问题 我正在实现一个可序列化的类(因此,这是一个使用RMI的值对象)。 但是我需要测试一下。 有没有一种方法可以轻松做到这一点? 澄清:我正在实现该类,因此将Serializable保留在类定义中是微不足道的。 我需要手动对其进行序列化/反序列化,以查看其是否有效。 我发现了这个C#问题,对于Java是否有类似的答案? 回答1 最简单的方法是检查对象是否是java.io.Serializable或java.io.Externalizable的实例,但这并不能真正证明该对象确实可序列化。 唯一可以确定的方法是实际尝试。 最简单的测试是这样的: new ObjectOutputStream(new ByteArrayOutputStream()).writeObject(myObject); 并检查它是否不会引发异常。 Apache Commons Lang提供了一个更简短的版本: SerializationUtils.serialize(myObject); 并再次检查异常。 您仍然可以更加严格,并检查它反序列化为与原始序列相同的东西: Serializable original = ... Serializable copy = SerializationUtils.clone(original); assertEquals(original, copy); 等等。 回答2
  • 帮助传递ArrayList和parcelable Activity(Help with passing ArrayList and parcelable Activity)
    问题 因此,我一直在搜寻昨天和最后一个夜晚的大部分时间,似乎无法绕过如何将arraylist传递给子活动的想法。 有大量传递原始数据类型的示例和摘要,但是我所拥有的是地址类型的数组列表(下面的address.java)。 我在stackoverflow和网络上发现了很多东西,但是除了带有GeoPoint示例的东西之外,没有其他东西引起很多关注。 再次,在我看来,他们只是将GeoPoint对象展平为两个整数并将其传递进来。我无法这样做,因为我的地址类可能会扩展为包括整数,浮点数或其他任何内容。 现在,为了简单起见,下面的测试应用程序只有两个字符串。 我以为,如果我可以让parcelalbe的东西可以工作的话,剩下的事就可以了。 有人可以为非原始对象的ArrayList发布工作示例,还是可以在下面添加代码以使工作正常? 更新:答复/编辑后,下面的代码现在可以工作。 谢谢! /* helloParcel.java */ public class helloParcel extends Activity { // holds objects of type 'address' == name and state private ArrayList <address> myList; @Override public void onCreate (Bundle
  • Using putSerializable in Android
    Is putSerializable broken? When I pass null with putSerializable the FillSummary.class starts as it should. If I however pass the a TestSerial object than Android force closes. What do I have to do to get a custom object transfered via a Bundle? public class TestSerial implements Serializable{ private static final long serialVersionUID = 2310640779687082782L; public int i; public TestSerial(){ i=1; } } private void renderSummary(){ Intent intent = new Intent(FillForm.this, FillSummary.class); Bundle extras = new Bundle(); extras.putSerializable("test serial", new TestSerial()); intent
  • 如何将位图对象从一项活动传递到另一项活动(How can I pass a Bitmap object from one activity to another)
    问题 在我的活动中,我创建一个Bitmap对象,然后需要启动另一个Activity ,如何从子活动(将要启动的那个)传递该Bitmap对象? 回答1 Bitmap实现了Parcelable ,因此您始终可以有意地传递它: Intent intent = new Intent(this, NewActivity.class); intent.putExtra("BitmapImage", bitmap); 并在另一端检索它: Intent intent = getIntent(); Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage"); 回答2 实际上,将位图作为Parcelable传递将导致“ JAVA BINDER FAILURE”错误。 尝试将位图作为字节数组传递并构建它以在下一个活动中显示。 我在这里分享了我的解决方案: 如何使用捆绑包在android活动之间传递图像(位图)? 回答3 由于Parceable(1mb)的大小限制,在活动之间将bitmap作为parceable传递不是一个好主意。 您可以将位图存储在内部存储器中的文件中,并通过几个活动来检索存储的位图。 这是一些示例代码。 要将位图存储在内部存储器中的文件myImage中: public String
  • Java:writeObject与writeExternal的效率(Java: efficiency of writeObject vs writeExternal)
    问题 据说Java的默认序列化机制不是很有效,因为a)它通过反射发现要写入/读取的字段,这通常很慢b)它会写入额外的数据流。 提高效率的一种方法是实现Externalizable及其writeExternal / readExternal方法。 问题是:如果我改为提供'writeObject / readObject'方法,而不在其中调用deafiltWriteObject / defaultReadObject,则此机制将不会使用反射来确定要写入/读取的字段,而且不会额外写入数据流(还是会不确定?)。 因此,从效率的角度来看,实现上述的writeObject / readObject是否与实现Externalizable相同? 还是后一种选择会带来一些前者没有的更多实际好处? 编辑:当然,区别是当实现readObject / writeObject的Serializable类被子类化时,如果子类具有自己的readObject / writeObject,则它们不需要调用super的readObject / writeObject。 如果父类/子类实现了Externalizable,则不是这样。 在这种情况下,需要显式调用super的writeExternal / readExternal。 但是,从效率的角度来看,这种差异是无关紧要的。 回答1 选择下一个要调用的类/
  • 目的putExtra ArrayList(Intent putExtra ArrayList<NameValuePair>)
    问题 有谁知道如何将ArrayList<NameValuePair>额外添加到Intent? ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("first_name", first_name)); nameValuePairs.add(new BasicNameValuePair("last_name", last_name)); nameValuePairs.add(new BasicNameValuePair("email", email)); nameValuePairs.add(new BasicNameValuePair("password", password)); /* Move on to step 2 */ Intent intent = new Intent(RegisterActivity1.this, RegisterActivity2.class); intent.putExtra("nvp", nameValuePairs); startActivity(intent); 这是RegisterActivity2的类声明: public class
  • 手把手教你如何玩转EasyExcel的导入和导出
    小蜗牛,今天爬了多远?不急,继续爬总会到达终点。 朋友们,今天学习了多久?别慌,保持学习才会看到更好的自己。 觉得我的文章还不错的,欢迎大家还可以关注我的微信公众号:Java菜鸟进阶之路 最近会写一个系列的文章进行推出,值得期待和持续关注哦! 文章目录 情景引入EasyExcel的引入引入EasyExcel的依赖导出普通样式的模板导出步骤定义导出模板的实体编写导出excel的工具类定义导出模板的实体编写调用导出方法的服务类 具有单元格下拉列表的模板导出步骤定义设置下拉列表内容的注解定义下拉列表接口定义下拉列表接口实现类定义下拉列表的excel模板导出方法 分Sheet单元导出大量数据步骤分多Sheet导出excel数据设置响应流的头信息 分sheet页导出数据方法 导入步骤导入pom依赖上传excel导入模板对应实体上传处理成功的消息提示实体上传处理失败的消息提示实体编写处理上传数据逻辑返回的实体类编写处理上传数据的逻辑处理类编写上传处理excel监听导入excel的数据一般性校验工具类接受 excel导入和导出数据的工具类Controller层接受文件上传方法以及处理导入数据 彩蛋(读取项目模板直接下载)场景步骤方法一:HttpServletResponse实现方法二:Response返回实现 惊喜发生原因分析解决办法 总结 情景引入 小白:起床起床,快起床!!! 我:小白
  • 你不知道的java对象序列化的秘密
    文章目录简介什么是序列化重构序列化对象序列化不是加密使用真正的加密使用代理Serializable和Externalizable的区别总结简介你知道序列化可以使用代理吗?你知道序列化的安全性吗?每个java程序员都听说过序列化,要存储对象需要序列化,要在网络上传输对象要序列化,看起来很简单的序列化其实里面还隐藏着很多小秘密,今天本文将会为大家一一揭秘。更多精彩内容且看:区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程更多内容请访问www.flydean.com什么是序列化序列化就是将java对象按照一定的顺序组织起来,用于在网络上传输或者写入存储中。而反序列化就是从网络中或者存储中读取存储的对象,将其转换成为真正的java对象。所以序列化的目的就是为了传输对象,对于一些复杂的对象,我们可以使用第三方的优秀框架,比如Thrift,Protocol Buffer等,使用起来非常的方便。JDK本身也提供了序列化的功能。要让一个对象可序列化,则可以实现java.io.Serializable接口。java.io
  • Java中的Serializable和Externalizable有什么区别?(What is the difference between Serializable and Externalizable in Java?)
    问题 Java中的Serializable和Externalizable有什么区别? 回答1 为了增加其他答案,通过实现java.io.Serializable ,您可以为类的对象获得“自动”序列化功能。 无需实现任何其他逻辑,它就可以工作。 Java运行时将使用反射来弄清楚如何对您的对象进行封送。 在Java的早期版本中,反射非常慢,因此序列化大对象图(例如,在客户端-服务器RMI应用程序中)存在一些性能问题。 为了处理这种情况,提供了java.io.Externalizable接口,它类似于java.io.Serializable但是具有自定义编写的机制来执行编组和解组功能(您需要在类上实现readExternal和writeExternal方法)。 这为您提供了解决反射性能瓶颈的方法。 在Java的最新版本(当然,从1.3版本开始)中,反射的性能比以前好得多,因此,这不再是问题。 我怀疑您很难从使用现代JVM的Externalizable获得有意义的收益。 此外,内置的Java序列化机制并不是唯一的机制,您可以获取第三方替代品,例如JBoss序列化,它要快得多,并且是默认替代品。 Externalizable一大缺点是您必须自己维护此逻辑-如果您在类中添加,删除或更改了字段,则必须更改writeExternal / readExternal方法来解决该问题。 总而言之,
  • SimpleListProperty上的NotSerializableException(NotSerializableException on SimpleListProperty)
    问题 我正在使用Javafx,并将对象包装到ListProperty中,以使tableview更新列表中对象的任何更改。 现在,我正在尝试序列化我的项目和对象的ListProperty,并抛出此异常。 java.io.NotSerializableException: javafx.beans.property.SimpleListProperty at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1181) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1541) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1506) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1429) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1175) at java.io.ObjectOutputStream.writeObject
  • 可序列化是什么意思?(What does Serializable mean?)
    问题 类在Java中可Serializable确切含义是什么? 或者总的来说... 回答1 序列化将一个对象从内存持久存储到一系列位中,例如保存到磁盘上。 反序列化是相反的-从磁盘读取数据以水合/创建对象。 就您的问题而言,它是一个接口,如果在一个类中实现,则该类可以由不同的序列化程序自动进行序列化和反序列化。 回答2 尽管大多数用户已经给出了答案,但是我想为需要它的人添加一个示例,以解释这个想法: 假设您有一个像以下这样的班级人员: public class Person implements java.io.Serializable { /** * */ private static final long serialVersionUID = 1L; public String firstName; public String lastName; public int age; public String address; public void play() { System.out.println(String.format( "If I win, send me the trophy to this address: %s", address)); } @Override public String toString() { return String.format("
  • Parceable Arraylist of objects
    I'm trying to pass an ArrayList of Person Objects from the MainActivity to SecondActivity to print the details of the person in a custom listView adapter. The application runs but it crashes when it reachesstartActivity() to the SecondActivity after passing the ArrayList of Persons. Person implements Parcelable public Person(String id, String name) { this.id = id; this.name = name; } public Person(Parcel in) { id = in.readString(); name = in.readString(); } public void writeToParcel(Parcel out, int flags) { out.writeString(id); out.writeString(name); } public static final Parcelable.Creator
  • 对象序列化 && JSON
    java对象持久化或者远程调用都需要将对象序列化后保存或传递,还原就需要反序列化。 对象序列化与反序列化 对象序列化时,会将对象的状态按字节保存,反序列化再解开字节封装为对象。只序列化对象的状态,因此,对象序列化不关注静态变量。 Serializable java为对象序列化提供了一套标准的API机制。 类要实现序列化,必须实现java.io.Serializable接口,该接口仅为标记作用,只有标记了该接口,才可以被序列化。 实现接口Serializable,默认序列化机制,会序列化当前对象及引用的其他所有关联对象。 serialVersionUID序列化与反序列化版本需要一致,未显示声明该版本号,则序列化时默认生成。 public class SerializationTest implements Serializable { private String name; private String address; public static void main(String[] args) throws Exception { SerializationTest t1 = new SerializationTest(); t1.name = "zhang"; t1.address = "shanghai"; System.out.println(t1.name + "->"