GetIntExtra всегда возвращает значение по умолчанию

Я пытаюсь передать целое число между действиями, используя намерение. Операция источника делает вызовы 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. Может ли кто-нибудь сказать мне, что я делаю неправильно, или я неправильно понимаю использование намерений?

Ответ 1

Проблема в том, что info.id будет "длинным" и не преобразуется в "int". Попробуйте

long iSelectedItem = intent.getLongExtra("selectedItem", -1)

Ответ 2

Я не нахожу метод putIntExtra(). Итак, я получил следующее:

intent.putExtra("jobId", 1);

и

Integer.parseInt(getIntent().getExtras().get("jobId").ToString());

Используйте try и catch для обработки Исключения.

UPDATE

Позже я обнаружил, что передаю jobId как строку в методе putExtra(), поэтому getIntExtra() всегда возвращал значение по умолчанию.

Итак, @Grant верен. Вы должны передать значение Integer в методе putExtra() для использования метода getIntExtra().

Ответ 3

У меня была эта проблема, и это было просто.

Проверьте, используете ли вы 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)

Надеюсь, это поможет.

Ответ 4

Легко:

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.

Ответ 5

В моем случае это произошло потому, что я создал объект с переменной-членом mId, объявленной как строка

public class Application {

private String mId;
....
}

intent.putExtra("id", myApplication.getId());

и как таковой, Extra передается как строка. просто измените переменную-член на int, вы получите идею;)

Ответ 6

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