2016-12-24 4 views
0

Я пытаюсь использовать намерение передать несколько значений (разных типов) между двумя действиями. До сих пор я пытался эти два подхода:Android: Невозможно поместить несколько значений в Intent/Bundle

Intent intent = new Intent(context, Receiver.class); 
Bundle bundle = new Bundle(); 
bundle.putInt("key1", v1); 
bundle.putString("key2", v2); 
bundle.putString("key3", v3); 
bundle.putInt("key4", v4); 
intent.putExtras(bundle); 

и:

Intent intent = new Intent(context, Receiver.class); 
intent.putInt("key1", v1); 
intent.putString("key2", v2); 
intent.putString("key3", v3); 
intent.putInt("key4", v4); 

Однако, это только кажется, значение для key1 сохраняется в обоих случаях (при использовании Bundle, он, очевидно, содержит только 1). Что мне не хватает?

Edit: Это, как я получить значения в Receiver:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_video); 

    Intent intent = getIntent(); 
    Bundle bundle = intent.getExtras(); 
    v1 = bundle.getInt("key1", DEFAULT1); 
    v2 = bundle.getString("key2", "DEFAULT2"); 
    v3 = bundle.getString("key3", "DEFAULT3"); 
    v4 = bundle.getInt("key4", DEFAULT4); 

    // ... 
} 

В качестве альтернативы:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_video); 

    Intent intent = getIntent(); 
    v1 = intent.getIntExtra("key1", DEFAULT1); 
    v2 = intent.getStringExtra("key2"); 
    v3 = intent.getStringExtra("key3"); 
    v4 = intent.getIntExtra("key4", DEFAULT2); 

    // ... 
} 

Когда я распечатать значения v1, v2, v3 и v4, v1 - это единственное значение с ненулевым значением/значением, отличным от значения по умолчанию (значение, которое я первоначально положил в key1 - на самом деле, все значения, которые я первоначально вложил в Intent, были не по умолчанию).

Edit 2:

Я попытался с помощью так:

intent.putExtra("bundle", bundle); 

, а затем в Receiver:

Bundle bundle = intent.getBundleExtra("bundle"); 

Однако bundle был нулевым.

Edit 3:

Изменение порядка, в котором значения ставятся в/извлечена из Intent не кажется влияет ничего. Также не указывается пропускная способность Bundle. Если это помогает, этот Intent используется в PendingIntent.

+0

«Однако в обоих случаях сохраняется только значение key1» - как вы это определяете? – CommonsWare

+0

Как вы извлекаете значения? – NehaK

+0

Отредактировал мой вопрос с помощью кода - я просто использую 'getExtras()' для Bundle и 'getExtra', если нет Bundle.Кроме того, я распечатал все полученные значения и сравнил их с значениями по умолчанию. – Technicolor

ответ

0

Оказывается, я проглядел что-то очень простое - мое Намерение было использовано в PendingIntent огня приемника, а затем начать сервис, но я забыл правильно перенести Пакет из первоначального намерения в (новое, другое) намерение, которое в конечном итоге было получено вторым Управлением (которое было начато b y услуга). Проблема теперь исправлена.

0

Вы можете просто передать и получить Intent Extras без использования Bundle.

SenderClass.java

Intent intent = new Intent(getApplicationContext(), Receiver.class); 
intent.putExtra("key1", key1); 
intent.putExtra("key2", key2); 
intent.putExtra("key3", key3); 
startActivity(intent) 

Receiver.java

String key1 = getIntent().getStringExtra("key1"); 
String key2 = getIntent().getStringExtra("key"); 
String key3 = getIntent().getStringExtra("key3"); 
+0

Я уже пробовал это (код в моем вопросе). Ни один из них не работал. – Technicolor

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

  • Нет связанных вопросов^_^