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); ... } ... }
Попробуйте это...