【问题标题】:Bundle loses values between activitiesBundle 在活动之间丢失值
【发布时间】:2014-11-10 14:31:44
【问题描述】:

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

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");

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

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    试试

    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();
    

    【讨论】:

    • 嗯,还是没有骰子。我添加了b = getIntent().getBundleExtra("android.intent.extra.INTENT"); Log.d("HERE",b.containsKey("fName")+"");,但在“日志”行上出现空指针异常。
    • 试试名字 = savedInstanceState.getStringArrayList("fName");
    • 没有骰子。我用我的原始代码和你的第一个建议尝试了你的最新建议。是否因为意图是待处理意图的一部分而遗漏了什么?
    • 您对更改待处理意图的最新编辑非常有效。当我看到你的编辑时,我偶然发现了这一点。谢谢!
    【解决方案2】:

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

    并在第二个活动中通过 intent.getExtra(b);

    【讨论】:

      【解决方案3】:

      如果您要交换自定义类对象,则该类必须实现Parcelable。如果你在做writeStringreadString等的时候错过了任何一个会员,那么相应的会员就会丢失。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-21
        • 2014-10-06
        • 2010-12-22
        • 2016-06-17
        • 2012-10-30
        相关资源
        最近更新 更多