在我的第一个活动中,我想将两个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。知道我做错了吗?
答案 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
。如果您在执行writeString
和readString
等时错过任何会员,则相应的会员将会丢失。