Android:是否仅在onCreate中使用getIntent()?

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) {

在Android(针对API 14-16)中,我有一个
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()