通过intent传递Strings时,在下一个Activity中获取String值时,只有一个不为null

时间:2013-03-17 14:42:23

标签: android android-intent

我将字符串作为intent extras传递,下面的方法是传递包含我希望通过intent传递的信息的参数,我可以看到“mc”和“title”中的值与它们应该在toast中一样:< / p>

 private void addProximityAlert(int id, Double latitude, Double longitude, String title, String mc) {

        Intent intent = new Intent(PROX_ALERT_INTENT);
        intent.putExtra("id", id);
        intent.putExtra("mc", mc);  
        intent.putExtra("gl", latitude);
        intent.putExtra("title", title);

        PendingIntent proximityIntent = PendingIntent.getBroadcast(Map.this, id, intent, 0);
        lm.addProximityAlert( latitude, longitude,  POINT_RADIUS,  PROX_ALERT_EXPIRATION,  proximityIntent  );

        Toast.makeText(getApplicationContext(),"INPAMAP "+intent.getStringExtra("title")+intent.getStringExtra("mc"),Toast.LENGTH_SHORT).show(); 
 }

现在在我的下一个课程中,无论我尝试什么,只做“mc”保留其值,其他变量始终为null,这是下一个活动:

@Override
public void onReceive(Context context, Intent intent) {

       NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

       Intent notificationIntent = new Intent(context, Map.class);
       PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
       Notification notification = createNotification();

       //Here I can see title is null and mc is what it should be
       Toast.makeText(context,"IN PA "+intent.getStringExtra("title")+intent.getStringExtra("mc") ,Toast.LENGTH_SHORT).show(); 

我已经尝试过使用捆绑包,这不起作用,我完全不知道为什么只有mc被传递,当mc和title都是字符串时。我试过只传递mc或title,但仍然只有mc不为null。我试图改变它们传递给addproximityAlert方法的顺序,以及它们作为附加项添加的顺序,我没有选择。我实际上想知道如何在Eclipse中正确调试,所以我可以在进入SO之前自己弄清楚这些问题,但是我承受了很大的时间压力。

我很感激如何找出问题的建议,谢谢。

2 个答案:

答案 0 :(得分:3)

您需要在PendingIntent.FLAG_UPDATE_CURRENT方法中设置PendingIntent.getXXX标记。

PendingIntent.getBroadcast(Map.this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

问题是PendingIntent.getXXX缓存意图并且可以返回先前创建的实例而不更新它。 FLAG_UPDATE_CURRENT强制它更新意图。 您可以在official documentation中找到更详细的说明。

答案 1 :(得分:1)

如果您想使用调试器找出问题,那么这是最好的方法。它在eclipse中的工作方式是你设置断点,你想停止代码运行并看到变量。可以通过右键单击任何行号旁边的左侧栏来设置这些。现在单击Debug。您可以从Project-&gt; debug执行此操作。您也可以右键单击项目和Debug - &gt; Android应用程序。现在,当应用程序运行并到达您的断点时,它将转入调试模式。在这里,您可以切换断点,查看每个点的变量值。

除此之外,您是否尝试将整组值作为列表传递?就像是: 您可以将ArrayList从父活动传递到被调用活动。这是一个示例:

ArrayList<TYPE> value = new ArrayList<TYPE>();
// populate the list
value.add(CALUE);
Intent intent = new Intent(CurrentActivity.this,TargetActivity.class);
intent.putExtra("arraylist", value);
startActivity(intent);

在目标类中,您可以按如下方式检索列表:

// Call in in OnCreate()
// TYPE can be String, Double etc.
ArrayList<TYPE> list=(ArrayList<TYPE>)getIntent().getSerializableExtra("arraylist");

希望这两件事中的任何一件都有帮助。