Android getIntent (). GetExtras () возвращает null

Я пытаюсь передать строку между двумя действиями. Я сделал это в других проектах, используя тот же метод, но по какой-то причине я получаю исключение NullPointerException, когда я вызываю aim.getStringExtra (String). Я также попытался создать Bundle для дополнительных функций через

Bundle b = getIntent().getExtras(); 

но это также возвращает null. Ниже приведен код, который я в настоящее время пытаюсь использовать.

Деятельность A:

 Intent myIntent = null; String select = ""; if (selection.equals("Chandelle")) { myIntent = new Intent(Commercial.this, Chandelle.class); select = "Chandelle"; } else if (selection.equals("Eights on Pylons")) { myIntent = new Intent(Commercial.this, EightsOnPylons.class); select = "Eights on Pylons"; } // Start the activity if (myIntent != null) { myIntent.putExtra("selection", select); Log.d("*** OUTBOUND INTENT: ", "" + myIntent.getExtras().get("selection")); startActivity(myIntent); } 

Вот код в действии B, который пытается вытащить лишний:

  public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent i = getIntent(); if (i == null) Log.d("***DEBUG****", "Intent was null"); else Log.d("**** DEBUG ***", "Intent OK"); String MANEUVER_ID = i.getStringExtra("selection"); //Exception points to this line Log.d("*** DEBUG", rec + " " + MANEUVER_ID); 

Я пробовал практически все альтернативные способы передачи дополнительных услуг, но все они, похоже, ведут себя так. Что мне не хватает?

Добавить .ToString() в myIntent.putExtra("selection", select); так что это myIntent.putExtra("selection", select.ToString());

К счастью, я нашел этот пост. Я боролся с этим в течение нескольких часов, и в конце я понял, что отправлю свое намерение на tabHost. 😉 Для тех, у кого до сих пор возникают проблемы с этим, просто добавьте дополнительные функции из самой активности tabHost и передайте их вместе с дочерними вкладками.

 String userID; 

, ,

  Bundle getuserID = getIntent().getExtras(); if (getuserID != null) { userID = getuserID.getString("userID"); } 

  intent = new Intent().setClass(this, Games.class); intent.putExtra("userID", userID); spec = tabHost.newTabSpec("games").setIndicator("Games", res.getDrawable(R.drawable.tab_games)) .setContent(intent); tabHost.addTab(spec); 

Попробуйте код ниже. Я добавил переопределение к вашему коду, который будет делать трюк:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent i = getIntent(); if (i == null) Log.d("***DEBUG****", "Intent was null"); else Log.d("**** DEBUG ***", "Intent OK"); String MANEUVER_ID = i.getStringExtra("selection"); //Exception points to this line Log.d("*** DEBUG", rec + " " + MANEUVER_ID); } 

Если вы все еще ничего не вложили в комплект, он всегда будет возвращать null !

Вы можете создать и установить комплект по своему усмотрению:

 Intent i = new Intent( ... ); i.putExtras(new Bundle()); Bundle bundle= i.getExtras(); // (not null anymore) 

Или, поместите фиктивное значение только для принудительной инициализации (я предпочитаю первое решение):

 Intent i = new Intent( ... ); i.putExtra("dummy", true); Bundle bundle= i.getExtras(); // (not null anymore) 

Посмотрите на свой код, я думаю, это может произойти, когда вы положили что-либо в действие 1. Потому что вы используете «if … else if», и у вас нет «else» для других случаев. Если это произойдет, вы получите нулевое значение в Activity 2. Еще раз проверьте этот случай.

В операции B вы выполняете следующую функцию:

  protected String getStringExtra(Bundle savedInstanceState, String id) { String l; l = (savedInstanceState == null) ? null : (String) savedInstanceState .getSerializable(id); if (l == null) { Bundle extras = getIntent().getExtras(); l = extras != null ? extras.getString(id) : null; } return l; } 

Вы используете его следующим образом в деятельности B:

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String MANEUVER_ID = getStringExtra(savedInstanceState, "selection"); } 
  • Android Вызов метода из другого classа
  • Создание с помощью каталога Intellij 2017.2 / out дублирует файлы в каталоге / build
  • Как перемешать символы в строке
  • FirebaseApp с именем не существует
  • Насколько велика ссылка на объект в Java и какая именно информация содержится в ней?
  • Вибрация с длительностью и узором
  • Создать новый class из переменной в Java
  • MathML и Java
  • Поиск в Android с помощью fragmentов
  • Java: вычитает «0» из char, чтобы получить int ... почему это работает?
  • Как нарисовать представление поверх всего?
  • Давайте будем гением компьютера.