我正在尝试使用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);
我认为问题在于您的EventHandler
类包含pendingIntent
字段,该字段无法序列化。您应该分离EventHandler
类,并仅在其中描述要序列化的字段。另外,请提供您的EventHandler
类的完整列表,以查看还会导致此问题的其他原因。您当前的列表不完整。