Android: использование getIntent () только в onCreate?


В Android (targeting APIs 14-16) у меня есть MainActivity и NextActivity. Нет никаких трудностей с использованием intents для запуска NextActivity изнутри MainActivity, если метод getIntent() вызывается внутри блока onCreate() NextActivity:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        int data = 7;
        ...
        Intent intent = new Intent(this, NextActivity.class);
        intent.putExtra("data", data);
        startActivity(intent);
        }
    }

public class NextActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final int data = this.getIntent().getIntExtra("data", 7);
        ...
        }
    ...
    }
Однако, поскольку поле data используется внутри анонимного ("внутреннего") класса в NextActivity, я вынужден объявить его final.

Я бы предпочел не объявлять поля final, и обычно я могу избежать этого, если я объявляю их в начале класса, прежде чем onCreate() начинается. Но по какой-то причине приложение аварийно завершает работу, когда NextActivity запускается, если оператор getIntent() появляется (без ключевого слова final) за пределами onCreate().

Есть идеи, почему?

2 7

2 ответа:

Вы не можете getIntent() раньше onCreate() - в этот момент просто нет Intent. Я считаю, что то же самое верно для всего, что требует Context.

Ваш анонимный внутренний класс все еще может вызывать getIntent(), поэтому вам не нужно объявлять это как переменную вообще.

В соответствии с вашим вопросом я понимаю, что вы не хотите объявлять данные окончательными в следующем действии..Тогда вы не можете попробовать для этого./

public class NextActivity extends Activity {
    int data=0;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         data = this.getIntent().getIntExtra("data", 7);
        ...
        }
    ...
    }

Попробуйте это...