Ответ 1
Проблема в том, что info.id будет "длинным" и не преобразуется в "int". Попробуйте
long iSelectedItem = intent.getLongExtra("selectedItem", -1)
Я пытаюсь передать целое число между действиями, используя намерение. Операция источника делает вызовы info.id выбранным элементом из ListView.
Intent intent = new Intent(myActivity.this, newClass.class);
intent.putExtra("selectedItem", info.id);
this.startActivity(intent);
Целевая активность извлекает намерение с помощью getIntent, затем вызывает
int iSelectedItem = intent.getIntExtra("selectedItem", -1);
iSelectedItem всегда равен -1 вместо значения, переданного putExtra. Может ли кто-нибудь сказать мне, что я делаю неправильно, или я неправильно понимаю использование намерений?
Проблема в том, что info.id будет "длинным" и не преобразуется в "int". Попробуйте
long iSelectedItem = intent.getLongExtra("selectedItem", -1)
Я не нахожу метод putIntExtra()
. Итак, я получил следующее:
intent.putExtra("jobId", 1);
и
Integer.parseInt(getIntent().getExtras().get("jobId").ToString());
Используйте try и catch для обработки Исключения.
UPDATE
Позже я обнаружил, что передаю jobId как строку в методе putExtra()
, поэтому getIntExtra()
всегда возвращал значение по умолчанию.
Итак, @Grant верен. Вы должны передать значение Integer в методе putExtra()
для использования метода getIntExtra()
.
У меня была эта проблема, и это было просто.
Проверьте, используете ли вы onActivityResult... чем, у вас нет для использования getIntent(), чтобы получить дополнительные функции, вы должны использовать намерение вы передаете как параметр.
В вашем случае должно быть что-то вроде этого:
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (resultCode == RESULT_OK) {
int iSelectedItem = intent.getIntExtra("selectedItem", -1);
Log.d("DEBUG", "check iSelectedItem = " + iSelectedItem);
}
}
Обратите внимание, что я не использую getIntent(), но намерение аргумента.
(PS: если вы вызываете много действий, ожидающих результатов, лучше проверить, имеет ли смысл!= null)
Надеюсь, это поможет.
Легко:
Bundle bundle = getIntent().getExtras();
int iSelectedItem = bundle.getInt("selectedItem", -1);
Теперь, если вы используете StartActivityForResult и хотите вернуть некоторые данные из дочерней активности, напомните, что вам нужно использовать onActivityResult
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (resultCode == RESULT_OK) {
int iSelectedItem = intent.getExtras.getInt("selectedItem", -1);
Log.d("DEBUG", "check iSelectedItem = " + iSelectedItem);
}
}
Помните, что так же, как вы получаете дополнительные функции из другой Activity, просто используя bundle.getInt, в этом примере getExtras возвращает пакет, поэтому в этом комплекте вы можете получить любые данные, которые вы отправили из resultIntent.
В моем случае это произошло потому, что я создал объект с переменной-членом mId, объявленной как строка
public class Application {
private String mId;
....
}
intent.putExtra("id", myApplication.getId());
и как таковой, Extra передается как строка. просто измените переменную-член на int, вы получите идею;)
int sub_menu_id = 0;
int question_part = 0;
if (savedInstanceState == null) {
Bundle extras = getIntent().getExtras();
if (extras == null) {
sub_menu_id = -1;
question_part = -1;
} else {
sub_menu_id = extras.getInt("sub_menu_id");
question_part = extras.getInt("question_part");
}
}
Log.d("DREG", "sub_menu_id: " + sub_menu_id + "\nquestion_part: " + question_part);