1

我正在尝试将多个数据项合二为一Intent

if (strActStat == "Sedentary") {
    // passactStat.putString("keySedentary", strActStat);
    // passSeden.putString("keyMale", gender);
    i = new Intent(CalorieTrackerTargetWeight.this, TargetWeightResults.class);
    i.putExtra("keyGender", gender);
    i.putExtra("keyAct", strActStat);
    //i.putExtra("keyAct", strActStat);

    startActivity(i);
}

为什么这不起作用?为什么我不能同时传递多个项目Intent

4

4 回答 4

6

您不能将字符串与==.

if (strActStat.equals("Sedentary")) { // should work

编辑:

@Hesam 写了一个非常详细的答案,但他的解决方案并不是真的可用。而不是使用.ArrayList<String>你应该坚持使用putExtra(key, value). 为什么?那么 ArrayList 解决方案有一些优点:

  1. 您不限于 ArrayList 的类型
  2. 您不必在列表中保留静态顺序。由于您只能使用索引值来获取列表,因此您需要确保put()与 的顺序相同get()。考虑以下情况:您经常发送 3 个值,但在某些情况下您不想发送第二个值。当您使用 ArrayList 解决方案时,您最终将null作为第二个值发送以确保第三个值将留在他的位置。这是非常混乱的编码!相反,您应该只发送两个值,并且当接收活动尝试接收第二个值时,它可以按需要处理返回的 null ......例如用默认值替换它。
  3. 命名密钥将使您始终知道里面应该有什么......
  4. key应该在接收活动中声明为常量。因此,通过查看此常量,您始终可以知道活动可以处理哪些意图数据。这是一个很好的编程!

希望这有助于澄清意图的使用。

于 2012-09-02T08:53:20.290 回答
1

我认为这不是唯一的问题,首先,if (strActStat == "Sedentary")这是错误的。您无法以这种方式与字符串进行比较。因为以这种方式对象正在比较的不是字符串。正确的方法是if (strActStat.equalIgnoreCase("Sedentary"))

如果您使用Parcelable,那么您可以在 1 个意图中传递多个数据。

你也可以使用ArrayList<String>. 这是您需要的代码框架:

申报清单

private List<String> test;

在适当的地方初始化列表

test = new ArrayList<String>();

并根据需要添加数据进行测试。

传递给意图如下:

Intent intent = getIntent();
intent.putStringArrayListExtra("test", (ArrayList<String>) test);

检索数据如下:

ArrayList<String> test = data.getStringArrayListExtra("test");

希望有帮助。

于 2012-09-02T08:53:27.713 回答
0

我遇到了同样的问题。我的错误是我传输的变量之一没有初始化。就像你的情况下的性别strActStat一样。

于 2014-05-03T14:11:45.567 回答
0

尝试这个:

done.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                namevalue=name.getText().toString();
                overvalue=over.getText().toString();
                audiostatus=audio.getText().toString();
                Intent intent=new Intent(Settings.this,home.class);
                 Bundle bundle = new Bundle();   
                 bundle.putString( "namevalue",namevalue);  
                 bundle.putString("overvalue",overvaluse);
                 bundle.putInt("value",variablename);
                 intent.putExtras(bundle);   
                 startActivity(intent);                 
                }
            });
于 2013-05-24T04:51:55.610 回答