【问题标题】:Android: using getIntent() only within onCreate?Android:仅在 onCreate 中使用 getIntent()?
【发布时间】:2012-12-21 03:02:06
【问题描述】:

在 Android(针对 API 14-16)中,我有一个 MainActivity 和一个 NextActivity。如果在NextActivityonCreate() 块内调用getIntent() 方法,则使用意图从MainActivity 内启动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() 开始之前)声明它们,我通常可以避免这样做。但是由于某种原因,如果在onCreate() 之外出现getIntent() 语句(没有final 关键字),则应用程序在NextActivity 启动时崩溃。

知道为什么吗?

【问题讨论】:

  • 你能发布崩溃的日志吗?

标签: android android-intent oncreate


【解决方案1】:

你不能在onCreate() 之前getIntent() —— 那时根本没有Intent 可用。我相信任何需要Context 的东西都是如此。

但是,您的匿名内部类仍然可以调用 getIntent(),因此您根本不需要将其声明为变量。

【讨论】:

  • 关于上下文的好点。内部类和其他地方都需要该变量,我需要能够修改它。所以也许我应该将变量声明为非final,但引入第二个final 变量来将值引入内部类。
  • 或者用getter方法在activity中声明为非final字段。您可以从匿名内部类内部或外部调用getData()
【解决方案2】:

根据您的问题,我的理解是您不想在下一个活动中将数据声明为最终数据。那么您不能尝试这样做。/

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

试试这个...

【讨论】:

  • 编译器需要类型声明;没有int就无法运行。
  • 啊,非常好。你完美地解决了这个问题。
  • 这是一个很好的通用方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多