getIntExtra всегда возвращает значение по умолчанию - PullRequest
16 голосов
/ 26 января 2010

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

Ответы [ 6 ]

21 голосов
/ 01 сентября 2010

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

long iSelectedItem = intent.getLongExtra("selectedItem", -1)
12 голосов
/ 10 января 2011

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

intent.putExtra("jobId", 1);

и

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

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

UPDATE

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

Значит, @Grant - это правильно. Вы должны передать целочисленное значение в методе putExtra(), чтобы использовать метод getIntExtra().

1 голос
/ 19 октября 2013

Легко:

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 .

1 голос
/ 05 июля 2011

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

Проверьте, используете ли вы 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: если вы вызываете много действий, ожидающих результатов, лучше проверить, является ли намерение! = Ноль)

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

0 голосов
/ 27 ноября 2017
    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);
0 голосов
/ 26 октября 2017

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

public class Application {

private String mId;
....
}

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...