【问题标题】:Exception by start new activity开始新活动的例外
【发布时间】:2014-03-24 12:50:02
【问题描述】:

我尝试开始一个新活动,然后我从模拟器中收到错误“不幸的是应用程序.....”。

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();

【问题讨论】:

  • 您为什么认为Intent intent = new Intent(null, Uebung2.class); 会起作用?明确要求上下文参数,它不是可选的或任何东西,没有理由不在这里传递参数。另外,您应该意识到 NPE 通常是由... null 引起的。

标签: android eclipse exception start-activity


【解决方案1】:
Intent intent = new Intent(null, Uebung2.class);

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

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

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

【讨论】:

  • 在我的情况下,正确的上下文是什么?我不能像往常一样使用它:)
【解决方案2】:

您的上下文为空

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

使用

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

我也没有看到任何网络或后台计算完成。因此,如果您想要交易,只使用处理程序是更好的选择。

【讨论】:

    【解决方案3】:

    你应该像这样在活动中传递上下文。

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

    【讨论】:

      【解决方案4】:

      您不能将上下文作为空值传递。所以需要从

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

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

      【讨论】:

        【解决方案5】:

        替换这一行

        Intent 意图 = new Intent(null, Uebung2.class);

        用这个:

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

        (或)

        Intent 意图 = new Intent(getApplicationContext(), Uebung2.class);

        别忘了在 Androidmanifest.xml 中提及活动

        【讨论】:

          【解决方案6】:
          Intent intent = new Intent(this, Uebung2.class);
          

          Intent intent = new Intent(Youactivityname.this, Uebung2.class);
          
          //Youactivityname mean the activity you was in like Mainactivity
          

          【讨论】:

            【解决方案7】:

            首先为您的班级创建一个上下文。

            Context context = Activityname.this;
            

            然后按如下方式更改您的 Intent

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-03-31
              相关资源
              最近更新 更多