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 ответа:
Вы не можете
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); ... } ... }Попробуйте это...