2012-02-11 2 views
2

Мне нужно передать 2 переменных из одной активности в другую.putExtras multiple putString не работает

У меня есть следующий за первую деятельность:

@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 I получите «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

Дважды проверьте значение 'drinkButton' и' drinkType', когда вы инициализируете их как 'String drinkButton ="? ";' –

+0

Ass Adil предложил, проверьте значение String для drinkButton и drinkType. У меня такое чувство, что они одинаковые. Это объясняет, почему вы получаете 1 для случая 1 и 2 для случая 2, как если бы они были одинаковыми, второй putString (drinkType, «1/2») будет перезаписывать первый putString (drinkButton, «4/1»). Вы хотите иметь putString («drinkButton», «4/1») и putString («drinkType», «1/2»)? –

+0

Вы пробовали hardcoding строковое значение в качестве ключа вместо использования строковой переменной, чтобы увидеть, получится ли у вас тот же результат? – bschultz

ответ

8

Если вы не присвоите значения переменным 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? Почему бы не передать их как целые числа?

+0

Работал, спасибо. Раньше я никогда не использовал IntentConstants. Я буду использовать это в будущем, и, да, я изменил строку на целое. Просто в начале моего проекта я проходил мимо строк. Еще раз спасибо. – user1095784

Смежные вопросы