4

嘿,我想从我的 MainActivity 启动一个 Activity,但不是在 oncreate 方法中。

public void awe()
{
    Intent myIntent = new Intent(MainActivity.this, Awesome.class);
    MainActivity.this.startActivity(myIntent);
}

另一个类调用方法 awe() ,我得到的是一个崩溃和

05-25 04:06:51.034: E/AndroidRuntime(7161): FATAL EXCEPTION: main
05-25 04:06:51.034: E/AndroidRuntime(7161): java.lang.NullPointerException
05-25 04:06:51.034: E/AndroidRuntime(7161):     at android.content.ContextWrapper.getPackageName(ContextWrapper.java:151)
05-25 04:06:51.034: E/AndroidRuntime(7161):     at android.content.ComponentName.<init>(ComponentName.java:106)
05-25 04:06:51.034: E/AndroidRuntime(7161):     at android.content.Intent.<init>(Intent.java:2895)
05-25 04:06:51.034: E/AndroidRuntime(7161):     at package name.MainActivity.awe(MainActivity.java:215)

有人知道我能做什么吗?

主要活动

public class MainActivity extends Activity implements OnClickListener { 
// (variable stuff)
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

          buttonE = (Button) findViewById(R.id.buttonEASY); 
          buttonM = (Button) findViewById(R.id.buttonMED);

// here I do all that button stuff for the layout
}



    public void onClick(View arg0) {
        System.out.println("click");
        if (arg0==buttonE)  {

                 int checkedRadioButton = radioGroup1.getCheckedRadioButtonId();
                                 String radioButtonSelected = "";

                                 switch (checkedRadioButton) {

                                  case R.id.radio0 : radioButtonSelected = "radiobutton1";
                                  Toast.makeText(getApplicationContext(), "Easy, 10 selected", Toast.LENGTH_SHORT).show();
                                  setContentView(R.layout.raten);

// Button stuff, again.


}



public void awe()
{   Intent tutorial = new Intent(MainActivity.this, Awesome.class); 
    if (tutorial != null) { startActivity(tutorial); } 

}

易.java

这里没什么重要的,我提到 awe() 的地方:

if (s==max+1){System.out.println("AWESOME!"); MainActivity mA = new MainActivity(); mA.awe();}

真棒.java

public class Awesome extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.awesome);
    }

我希望我现在发布了所有重要的内容

4

4 回答 4

5

问题可能是调用 awe() 方法时 MainActivity 还没有完全初始化,并且 Activity 的内部 Context 为空。

于 2014-01-09T15:59:57.120 回答
3

Android 活动需要考虑的事项:

你有在 中extend Activity定义的类AndroidManifest.xml吗?

Context在使用时知道你的Intents吗?

对于调用意图,如果您通过包名调用,请始终检查 null:

Intent mTutorial = new Intent(MainActivity.this, TutorialActivity.class); 

this.startActivity(mTutorial); 

你的问题只是试图调用你的“awe()”方法是在另一个没有你的 MainActivity 正确上下文的活动中:http: //developer.android.com/reference/android/content/Intent.html

Android Intent 需要一个“上下文”和一个“类”。

更新:这是另一篇有帮助的帖子:

从 Android 上的另一个应用程序启动一个应用程序

问候,

于 2013-05-25T03:25:01.090 回答
0

我遇到了同样的错误,我花了一段时间才弄清楚。就像@csgero 提到的那样,我的问题是我尝试启动的活动没有初始化。这意味着在调用 onCreate 之前发生错误。事实证明,我在要调用的活动中定义变量的代码部分存在错误。祝你好运!

于 2014-10-30T14:39:31.117 回答
0

问题可能是 MainActivity 为空。就我而言,活动在运行 abvoe 代码时被破坏。因此 Activity 的内部 Context 为空。

于 2016-04-28T06:08:45.920 回答