Подтвердить что ты не робот

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);

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

4b9b3361

Ответ 1

Добавьте .ToString() в myIntent.putExtra("selection", select);, чтобы он был myIntent.putExtra("selection", select.ToString());

Ответ 2

К счастью, я нашел этот пост. Я боролся с этим в течение нескольких часов, и в конце я понял, что отправлю свое намерение на 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);

Ответ 3

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

@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);
}

Ответ 4

Если вы все еще ничего не вкладывали в комплект, он всегда будет возвращать 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)

Ответ 5

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

Ответ 6

В операции 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");      
}