开始新活动的例外情况

时间:2014-03-24 12:50:02

标签: android eclipse exception start-activity

我尝试开始新的活动然后我收到错误"不幸的应用程序....."来自模拟器。

03-24 12:41:53.242: E/AndroidRuntime(1245): FATAL EXCEPTION: main
03-24 12:41:53.242: E/AndroidRuntime(1245): java.lang.NullPointerException
03-24 12:41:53.242: E/AndroidRuntime(1245):     at android.content.ComponentName.<init>(ComponentName.java:75)
03-24 12:41:53.242: E/AndroidRuntime(1245):     at android.content.Intent.<init>(Intent.java:3662)
03-24 12:41:53.242: E/AndroidRuntime(1245):     at de.basti12354.tage.uebungen.Tag1$1$1.run(Tag1.java:115)
03-24 12:41:53.242: E/AndroidRuntime(1245):     at android.os.Handler.handleCallback(Handler.java:730)
03-24 12:41:53.242: E/AndroidRuntime(1245):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-24 12:41:53.242: E/AndroidRuntime(1245):     at android.os.Looper.loop(Looper.java:137)
03-24 12:41:53.242: E/AndroidRuntime(1245):     at android.app.ActivityThread.main(ActivityThread.java:5103)
03-24 12:41:53.242: E/AndroidRuntime(1245):     at java.lang.reflect.Method.invokeNative(Native Method)
03-24 12:41:53.242: E/AndroidRuntime(1245):     at java.lang.reflect.Method.invoke(Method.java:525)
03-24 12:41:53.242: E/AndroidRuntime(1245):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-24 12:41:53.242: E/AndroidRuntime(1245):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-24 12:41:53.242: E/AndroidRuntime(1245):     at dalvik.system.NativeStart.main(Native Method)

我已将新活动添加到ManifestLayout。

这是我开始名为Uebung2.class的新活动的代码。

    @Override
        public void run() {
            while (Running){
                try {
                    Thread.sleep(1000);}

                catch (InterruptedException e) {
                    e.printStackTrace();
                    // TODO: handle exception
                }
                handler.post(new Runnable() {
                    @Override
                    public void run(){
                        number+=1;
                        textfield.setText(String.valueOf(number));
                        if (number>5) {
                            Intent intent = new Intent(null, Uebung2.class);
                            startActivity(intent);

                        }

                    }
                } );
            }

        }
    };
    new Thread(runnable).start();

7 个答案:

答案 0 :(得分:2)

Intent intent = new Intent(null, Uebung2.class);

您必须为Intent构造函数提供有效的Context,而不是null

使用什么取决于代码所在的上下文(原文如此)。如果嵌套的内部类实际上在活动中,请使用ActivityName.this来引用外部活动类。

另外,请考虑仅使用handler.postDelayed()在后​​台线程中生成延迟而不是Thread.sleep()

答案 1 :(得分:2)

您的上下文为空

Intent intent = new Intent(null, Uebung2.class);

使用

Intent intent = new Intent(ActivityName.this, Uebung2.class);

此外,我没有看到任何网络或后台计算完成。因此,如果你想要一个dealy,那么只使用处理程序是一个更好的选择。

答案 2 :(得分:0)

您应该像这样传递活动中的上下文。

 Intent intent = new Intent(ActivityName.this, Uebung2.class);
 (or)
 Intent intent = new Intent(getApplicationContext(), Uebung2.class);

答案 3 :(得分:0)

初步创建班级的上下文。

Context context = Activityname.this;

然后按如下方式更改您的意图

Intent intent = new Intent(context, Uebung2.class);

答案 4 :(得分:0)

您无法将上下文作为null传递。所以需要改变

Intent intent = new Intent(null, Uebung2.class);

Intent intent = new Intent(YourActivityName.this, Uebung2.class);

答案 5 :(得分:0)

替换此行

  

Intent intent = new Intent(null,Uebung2.class);

用这个:

  

Intent intent = new Intent(ActivityName.this,Uebung2.class);

(或)

  

Intent intent = new Intent(getApplicationContext(),Uebung2.class);

并且不要忘记在Androidmanifest.xml中提及活动

答案 6 :(得分:0)

Intent intent = new Intent(this, Uebung2.class);

Intent intent = new Intent(Youactivityname.this, Uebung2.class);

//Youactivityname mean the activity you was in like Mainactivity