【问题标题】:putExtras multiple putString not workingputExtras 多个 putString 不起作用
【发布时间】:2012-02-11 16:04:14
【问题描述】:

我需要将 2 个变量从一个活动传递到另一个活动。

我有以下第一个活动:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    Bundle bundle=new Bundle();
switch (item.getItemId()){ 

case 1: 

    bundle.putString(drinkButton, "4");
    bundle.putString(drinkType, "1");
    Intent myIntent1 = new Intent(this, DrinksList.class);
    myIntent1.putExtras(bundle);
    startActivityForResult(myIntent1, 0);
    return true;

case 2: 

    bundle.putString(drinkButton, "1");
    bundle.putString(drinkType, "2");
    Intent myIntent2 = new Intent(this, DrinksList.class);
    myIntent2.putExtras(bundle);
    startActivityForResult(myIntent2, 0);
    return true;
}
return false;

然后在第二个活动中,我使用它来取回值,但两个值相同,即与“drinkType”相同,案例 1 我得到“1”,案例 2 得到“2”,当我希望得到 4,1 和 1,2。

Bundle extras = getIntent().getExtras();

        drinkButton = extras.getString(drinkButton);


        drinkType = extras.getString(drinkType);

    Toast.makeText(this, "drink Button = "+drinkButton+"  Drink Type = "+drinkType, Toast.LENGTH_LONG).show();  


} 

看来我最多只能通过一个。有什么想法吗?

【问题讨论】:

  • 在将drinkButtondrinkType 初始化为String drinkButton = "?"; 时,请仔细检查字符串值
  • Ass Adil 建议,检查drinkBut​​ton 和drinkType 的字符串值。我有一种感觉,它们的价值是一样的。它可以解释为什么你在案例一中得到 1,在案例二中得到 2,就好像它们是一样的,第二个 putString(drinkType, "1/2") 将覆盖第一个 putString(drinkBut​​ton, "4/1")。你的意思是有 putString("drinkBut​​ton","4/1") 和 putString("drinkType", "1/2") 吗?
  • 您是否尝试过将字符串值硬编码为键而不是使用字符串变量来查看是否得到相同的结果?
  • 我声明私有字符串drinkBut​​ton;和私有字符串drinkType;
  • 另外,刚刚尝试交换圆形 bundle.putString(drinkType, "2");和 bundle.putString(drinkBut​​ton, "4");现在我得到 4 而不是 2 和 4。为什么一个不同名称的变量会覆盖另一个变量?

标签: android eclipse extras


【解决方案1】:

如果您不为变量drinkButtondrinkType 赋值,那么当您在第一个活动中使用它们时,它们都是null。在这种情况下,您的代码:

bundle.putString(drinkButton, "4");
bundle.putString(drinkType, "1");

等价于

bundle.putString(null, "4");
bundle.putString(null, "1");

看,您正在使用具有null 值的变量作为putString() 的“键”参数。

像这样设置“关键”参数的最常见方法是使用常量。例如:

public interface IntentConstants {
    public static final String EXTRA_DRINK_BUTTON = "DrinkButton";
    public static final String EXTRA_DRINK_TYPE = "DrinkType";
}

然后在您的活动中,使用这些常量,如下所示:

bundle.putString(IntentConstants.EXTRA_DRINK_BUTTON, "4");
bundle.putString(IntentConstants.EXTRA_DRINK_TYPE, "1");

并在第二个 Activity 中检索它们:

String drinkButton = extras.getString(IntentConstants.EXTRA_DRINK_BUTTON);
String drinkType = extras.getString(IntentConstants.EXTRA_DRINK_Type);

顺便说一句,您将整数值作为字符串附加值传递是否有特殊原因?为什么不将它们作为整数传递?

【讨论】:

  • 工作,谢谢。我以前从未使用过 IntentConstants。我将来会使用它,而且,是的,我已将字符串更改为整数。只是在我项目的早期,我正在传递字符串。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 2017-01-03
  • 2012-06-29
  • 2014-10-13
  • 1970-01-01
相关资源
最近更新 更多