【发布时间】:2012-03-29 16:20:33
【问题描述】:
场景:
我有一个警报计划在指定的时间内运行。每次执行时,我的 BroadCastReceiver 都会触发。
在 BroadCastReceiver 中,我进行了各种检查,最终生成了 Notify 类的 ArrayList
我在状态栏上显示通知
当用户点击通知时,我会显示一个活动。我需要在我的 Activity 中使用 ArrayList 将其显示在视图上。
这里是示例代码:
public class ReceiverAlarm extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ArrayList<Notify> notifications = new ArrayList<Notify>();
//do the checks, for exemplification I add these values
notifications.add(new Notify("id1","This is very important"));
notifications.add(new Notify("id2","This is not so important"));
notifications.add(new Notify("id3","This is way too mimportant"));
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
//init some values from notificationManager
Intent intentNotif = new Intent(context, NotificationViewer.class);
intentNotif.putParcelableArrayListExtra("list", notifications);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intentNotif, 0);
Notification notification = new Notification(icon, text, when);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notificationManager.notify(NOTIFICATION_ID, notification);
}
还有
public class NotificationViewer extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.notification_viewer);
ArrayList<Notify> testArrayList = null;
Bundle b = getIntent().getExtras();
if (b != null) {
testArrayList = b.getParcelableArrayList("list");
}
}
和
public class Notify implements Parcelable {
public Notify(Parcel in) {
readFromParcel(in);
}
@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Notify createFromParcel(Parcel in) {
return new Notify(in);
}
public Notify[] newArray(int size) {
return new Notify[size];
}
};
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(id);
dest.writeString(text);
}
private void readFromParcel(Parcel in) {
id = in.readString();
text = in.readString();
}
public Notify(String id, String text) {
super();
this.id = id;
this.text = text;
}
/** The id. */
public String id;
/** Notification text to be displayed. */
public String text;
@Override
public int describeContents() {
return 0;
}
}
在 testArrayList = b.getParcelableArrayList("list");从 NotificationNActivity 我得到这个错误:
E/AndroidRuntime(14319): java.lang.RuntimeException: Unable to start activityComponentInfo{NotificationViewer}: java.lang.RuntimeException: Parcel android.os.Parcel@4050f960:在解组未知类型代码 7602277 偏移量 124
如您所见,从 SO 的问题中,我说我需要使我的对象 Parcelable。也许我在那里做错了什么,但是......我不知道如何解决它。我做错了什么?
【问题讨论】:
-
我无法通过快速扫描发现问题。你能添加一个 if(getIntent().getExtras().contains("list")) { log.v("", "Exists"); } else { log.v("", "不存在"); } ?
-
该示例明确键入 Creator
Parcelable.Creator<MyParcelable> CREATOR。你不也应该这样做吗?
标签: android arraylist broadcastreceiver android-activity parcelable