Android getIntent(). GetExtras() возвращает ноль

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

Bundle b = getIntent().getExtras();

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

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

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

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

6 ответов

Добавлять .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);
}

Моя проблема была решена, когда я понял, что не нужно запускать Acitvity(), прежде чем я использовал putExtra(). Ошибка новичка, но я надеюсь, что кто-то найдет это полезным.

Я изменил это

Intent i1 = new Intent(MainActivity.this,Second.class);
    startActivity(i1);
    String abc = e1.getText().toString();
    i1.putExtra("user",abc);

к этому

Intent i1 = new Intent(MainActivity.this,Second.class);
    String abc = e1.getText().toString();
    i1.putExtra("user",abc);
    startActivity(i1);

Если вы еще ничего не положили в пакет, он всегда вернется 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" для других случаев. Если это произойдет, вы получите нулевое значение в упражнении 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");      
}
Другие вопросы по тегам