Ответ 1
Добавьте .ToString()
в myIntent.putExtra("selection", select);
, чтобы он был myIntent.putExtra("selection", select.ToString());
Я пытаюсь передать строку между двумя действиями. Я сделал это в других проектах, используя тот же метод, но по какой-то причине я получаю исключение 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");
}