Android:是否仅在onCreate中使用getIntent()?
在Android(针对API 14-16)中,我有一个Android:是否仅在onCreate中使用getIntent()?,android,android-intent,oncreate,Android,Android Intent,Oncreate,在Android(针对API 14-16)中,我有一个main活动和一个NextActivity。如果在NextActivity的onCreate()块内调用了getIntent()方法,则使用意图从main活动中启动NextActivity不会有困难: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) {
main活动
和一个NextActivity
。如果在NextActivity
的onCreate()
块内调用了getIntent()
方法,则使用意图从main活动中启动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);
...
}
...
}
但是,由于在nextractivity
中的匿名(“内部”)类中使用了字段data
,因此我不得不声明它为final
我不希望声明字段final
,如果我在类的开头,即onCreate()
开始之前声明字段,通常可以避免这样做。但出于某种原因,如果在onCreate()
之外出现getIntent()
语句(没有final
关键字),则当NextActivity
启动时,应用程序会崩溃
你知道为什么吗?根据你的问题,我的理解是你不想在下一个活动中声明数据为最终数据。那么你不能尝试这样做/
public class NextActivity extends Activity {
int data=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
data = this.getIntent().getIntExtra("data", 7);
...
}
...
}
试试这个…你不能在onCreate()之前getIntent()
——在那一点上根本没有Intent
可用。我相信这同样适用于任何需要上下文的情况
您的匿名内部类仍然可以调用getIntent()
,因此您根本不需要将其声明为变量。可以发布崩溃日志吗?编译器需要类型声明;没有int
就无法运行它。啊,非常好。你很好地解决了这个问题。这是一个很好的通用方法。关于上下文的观点很好。内部类和其他地方都需要这个变量,我需要能够修改它。因此,也许我应该将变量声明为non-final
,但引入第二个,final
变量将值引导到内部类中。或者使用getter方法将其声明为活动中的非final字段。您可以从匿名内部类内部或外部调用getData()
。