putExtras несколько putString не работает - PullRequest
2 голосов
/ 11 февраля 2012

Мне нужно передать 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();  


} 

Кажется, я не могу пропустить больше одного. Есть идеи?

1 Ответ

8 голосов
/ 12 февраля 2012

Если вы не присваиваете значения переменным drinkButton и drinkType, они оба 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");

, и получите их во втором задании:

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

Кстати, есть ли конкретная причина, по которой вы передаете целочисленные значения как дополнительные функции String?Почему бы не передать их как целые числа?

...