按钮导致崩溃

时间:2016-07-24 03:21:48

标签: java android xml android-studio

我一直在官方Android Dev网站上关注Android Studio培训教程,以创建一个简单的"消息传递" app(link to tutorial)。我到达了#34;构建我的第一个应用程序"。当我点击"发送按钮"应用程序崩溃,消息内容无关紧要。我已经在手机和模拟器上试过了。 这是错误代码:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.john.myfirstapp, PID: 3180
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.john.myfirstapp/com.john.myfirstapp.DisplayMessageActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
   at android.app.ActivityThread.-wrap11(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:148)
   at android.app.ActivityThread.main(ActivityThread.java:5417)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference
   at com.john.myfirstapp.DisplayMessageActivity.<init>(DisplayMessageActivity.java:16)
   at java.lang.Class.newInstance(Native Method)
   at android.app.Instrumentation.newActivity(Instrumentation.java:1067)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
   at android.app.ActivityThread.-wrap11(ActivityThread.java) 
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
   at android.os.Handler.dispatchMessage(Handler.java:102) 
   at android.os.Looper.loop(Looper.java:148) 
   at android.app.ActivityThread.main(ActivityThread.java:5417) 
   at java.lang.reflect.Method.invoke(Native Method) 
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Android Studio也在这条线上给了我一个建议:

  

getSupportActionBar()setDisplayHomeAsUpEnabled(真);

它声明:

  

方法调用&#39; getSupportActionBar()。setDisplayHomeAsUpEnabled(true)&#39;可能会产生&#39; java.lang.NullPointerException&#39;

我非常确定这不是一个小错误,比如卷曲或缺少引用。

感谢任何帮助:)

3 个答案:

答案 0 :(得分:0)

根据您使用过的示例,您必须执行以下操作:

class SomeClass
{
    public static class ObjectType
    {
        public const int A = 1;
        public const int B = 2;
        public const int C = 4;
        public const int D = 8;
    }

    public int MyType;
    public string Title;
    static void Main(string[] args)
    {
        List<SomeClass> list = new List<SomeClass>()
        {
            new SomeClass() {Title ="I am of type A", MyType = ObjectType.A }
            ,new SomeClass() {Title ="I am of type B", MyType = ObjectType.B }
            ,new SomeClass() {Title ="I am of type AB", MyType = ObjectType.A | ObjectType.B }
        };

        list.ForEach(p => { if (p.MyType == (ObjectType.A | ObjectType.B)) Console.WriteLine(p.Title); });
    }
}

所以,也许,你没有正确启动Activity并且这个intent是null ...所以,尝试添加一个空指针检查:

Intent intent = getIntent();
String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);

此外,使用DisplayMessageActivity和MainActivity代码更新您的问题。然后,我可以帮助您正确解决此问题。

答案 1 :(得分:0)

请查看以下log

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference 
at com.john.myfirstapp.DisplayMessageActivity.<init>(DisplayMessageActivity.java:16)

这意味着您尝试从文件getStringExtranull行的16对象调用函数DisplayMessageActivity.java。您应该检查以避免该行中的NPE

答案 2 :(得分:0)

当应用程序在需要对象的情况下尝试使用null时,抛出空指针异常。其中包括:

  1. 调用null对象的实例方法。
  2. 访问或修改空对象的字段。
  3. 将null的长度视为数组。
  4. 访问或修改null的插槽,就像它是一个数组一样。
  5. 抛出null,就好像它是一个Throwable值。
  6. 应用程序应抛出此类的实例以指示其他非法使用null对象。

    您可以在此link. Click Here

    上找到更多信息