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