java.io.NotSerializableException:android.app.PendingIntent

问题描述 投票:0回答:1

我正在尝试使用AlarmManager创建pendingIntent的实例,但是我不明白我要去哪里。

我的Android应用实现了一个客户类别(eventHandler),即Serializable。我已将类的对象转换为字节数组,以将其作为额外的内容传递给我的警报意图。该应用程序启动并正常运行,读取字节数组,并在具有未决意图的对象中创建警报意图。当我尝试启动第二个活动,获取类的对象(可序列化),然后将其转换为字节数组以作为额外传递时,就会发生问题。

有问题的代码是:

Intent intent = new Intent(getActivity(), EventWeatherActivity.class);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ObjectOutputStream out = null;
            try {
                out = new ObjectOutputStream(bos);
                **out.writeObject(event);**
                out.flush();
                byte[] data = bos.toByteArray();

                intent.putExtra(EXTRA_MESSAGE, data);

out.writeObject(event);-是导致错误的行。但是当应用启动时,属于eventHandler(Serializable)的事件确实运行了,所以为什么在我启动另一个活动时会出现问题?

我得到的错误是:

    W/System.err: java.io.NotSerializableException: android.app.PendingIntent
2020-03-21 10:26:43.440 7646-7646/com.example.scrollingtext W/System.err:     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1240)
2020-03-21 10:26:43.440 7646-7646/com.example.scrollingtext W/System.err:     at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1604)
2020-03-21 10:26:43.440 7646-7646/com.example.scrollingtext W/System.err:     at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1565)
2020-03-21 10:26:43.443 7646-7646/com.example.scrollingtext W/System.err:     at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488)
2020-03-21 10:26:43.443 7646-7646/com.example.scrollingtext W/System.err:     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234)
2020-03-21 10:26:43.443 7646-7646/com.example.scrollingtext W/System.err:     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354)
2020-03-21 10:26:43.444 7646-7646/com.example.scrollingtext W/System.err:     at com.example.scrollingtext.EventFragment$1.onItemClick(EventFragment.java:122)

在我的客户类中(eventHandler事件):

                    Intent alarmIntent = new Intent(context, NotificationReceiver.class);

                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                ObjectOutputStream out = null;
                try {
                    out = new ObjectOutputStream(bos);
                    out.writeObject(this);
                    out.flush();
                    byte[] data = bos.toByteArray();
                    alarmIntent.putExtra("imw.notification", data);
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        bos.close();
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }

                final int id = (int) System.currentTimeMillis();
                pendingIntent = PendingIntent.getBroadcast(context, id, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
java android alarmmanager android-pendingintent
1个回答
0
投票

我认为问题在于您的EventHandler类包含pendingIntent字段,该字段无法序列化。您应该分离EventHandler类,并仅在其中描述要序列化的字段。另外,请提供您的EventHandler类的完整列表,以查看还会导致此问题的其他原因。您当前的列表不完整。

© www.soinside.com 2019 - 2024. All rights reserved.