2

我将字符串作为意图附加值传递,以下方法传递了包含我希望通过意图传递的信息的参数,我可以看到“mc”和“title”中的值应该在 toasts 中:

 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”保留其值,其他变量始终为空,这是下一个活动:

@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 不为空。我试图更改它们传递给 addproximityAlert 方法的顺序以及它们作为附加项添加的顺序,我没有选择。我实际上想知道如何在 Eclipse 中正确调试,这样我也许可以在使用 SO 之前自己找出这些问题,但我面临着很大的时间压力。

我将不胜感激有关如何找出我的问题的建议,谢谢。

4

2 回答 2

4

您需要在方法中设置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强制它更新意图。你可以在官方文档中找到更详细的解释。

于 2013-03-17T16:29:43.613 回答
1

如果您想使用调试器找出问题,那是最好的方法。它在 Eclipse 中的工作方式是您在要停止代码运行并查看变量的位置设置断点。这些可以通过右键单击任何行号旁边的左侧栏来设置。现在单击调试。您可以从 Project->debug 执行此操作。您也可以右键单击项目和调试 -> 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");

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

于 2013-03-17T15:42:53.687 回答