Bundle在活动之间丢失值

时间:2013-12-23 21:45:07

标签: android android-intent

在我的第一个活动中,我想将两个String数组列表传递给另一个活动,但出于某种原因,当我从第二个活动中提取值时,该包会丢失所有值。以下是发送的相关代码:

NotificationManager notificationManager = (NotificationManager) 
    getSystemService(NOTIFICATION_SERVICE);

Bundle b = new Bundle();
b.putStringArrayList("fName", friendNames);
b.putStringArrayList("fIds", friendIds);

Intent intent = new Intent(getApplicationContext(), Friendrequest.class);

PendingIntent.getBroadcast(this.getApplicationContext(), 0, intent, 
    PendingIntent.FLAG_UPDATE_CURRENT).cancel();

intent.putExtras(b);

PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);

// creates notification
Notification n = new Notification.Builder(this)
    .setContentTitle("You have a friend request!")
    .setSmallIcon(R.drawable.ic_launcher)
    .setContentIntent(pIntent).setAutoCancel(true).build();

notificationManager.notify(0, n);

以下是接收的相关代码:

names = new ArrayList<String>();
ids = new ArrayList<String>();

Bundle b = new Bundle();

b = getIntent().getExtras();

names = b.getStringArrayList("fName");

ids = b.getStringArrayList("fIds");

现在,在我在第一段代码中创建通知后,我检查确保“friendNames”数组列表确实包含正确的值,然后调用b.containsKey("fName")并返回true ,但是当我检查第二段代码中的“names”数组列表时,没有任何值,当我调用b.containsKey("fName")时,它返回false。知道我做错了吗?

3 个答案:

答案 0 :(得分:2)

尝试

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent,
                    PendingIntent.FLAG_UPDATE_CURRENT);

而不是

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

请参阅此链接。 Intent.getExtras() always returns null

尝试

intent.putExtra("android.intent.extra.INTENT", b);

而不是

intent.putExtras(b);

并尝试

b = getIntent().getBundleExtra("android.intent.extra.INTENT");

而不是

 b = getIntent().getExtras();

答案 1 :(得分:0)

来自您以前的活动(发送价值的活动)intent.putExtra("android.intent.extra.INTENT", b);

并在第二个活动中访问它们 intent.getExtra(b);

答案 2 :(得分:0)

如果要交换自定义类对象,则该类必须实现Parcelable。如果您在执行writeStringreadString等时错过任何会员,则相应的会员将会丢失。