我将字符串作为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之前自己弄清楚这些问题,但是我承受了很大的时间压力。
我很感激如何找出问题的建议,谢谢。
答案 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");
希望这两件事中的任何一件都有帮助。