Java Android错误尝试对空对象引用调用虚拟方法

Java Android错误尝试对空对象引用调用虚拟方法,java,android,android-studio,Java,Android,Android Studio,我是Android Studio的新手(我讨厌从Eclipse过渡的经历)。我正在尝试编写一个目前有两个活动的应用程序。我已经为主逻辑编写了Java代码,它工作得很好,但还没有将其放在第二个活动中。当我试图编写和运行应用程序时,它给了我一个错误 有后勤活动和主要活动。目前LoginActivity只有一个虚拟文本和一个按钮,用于将用户带到MainActivity。当前MainActivity中只有一个文本视图。当我点击它时,应用程序崩溃并出现以下错误。我可以看出它与启动主活动有关,但我似乎无法修

我是Android Studio的新手(我讨厌从Eclipse过渡的经历)。我正在尝试编写一个目前有两个活动的应用程序。我已经为主逻辑编写了Java代码,它工作得很好,但还没有将其放在第二个活动中。当我试图编写和运行应用程序时,它给了我一个错误

有后勤活动和主要活动。目前LoginActivity只有一个虚拟文本和一个按钮,用于将用户带到MainActivity。当前MainActivity中只有一个文本视图。当我点击它时,应用程序崩溃并出现以下错误。我可以看出它与启动主活动有关,但我似乎无法修复它

09-10 20:16:43.012  21126-21126/com.projects.example.myapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.projects.example.myapp, PID: 21126
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.projects.example.myapp/com.projects.example.myapp.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2418)
            at android.app.ActivityThread.access$900(ActivityThread.java:154)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5289)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
            at android.app.Activity.findViewById(Activity.java:2072)
            at com.projects.example.myapp.MainActivity.<init>(MainActivity.java:22)
            at java.lang.reflect.Constructor.newInstance(Native Method)
            at java.lang.Class.newInstance(Class.java:1606)
            at android.app.Instrumentation.newActivity(Instrumentation.java:1066)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2418)
            at android.app.ActivityThread.access$900(ActivityThread.java:154)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5289)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
请求的主要活动代码(第22行由前缀**表示):


原因是,您试图在创建活动之前为currentWinnerLabel赋值

除非创建活动,否则上下文为null,并且您正在对null对象引用调用findViewById方法

只需更改您的代码:

TextView currentWinnerLabel;
及之后:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        currentWinnerLabel = (TextView)findViewById(R.id.currentWinnerLabel);

...

原因是,您试图在创建活动之前为currentWinnerLabel赋值

除非创建活动,否则上下文为null,并且您正在对null对象引用调用findViewById方法

只需更改您的代码:

TextView currentWinnerLabel;
及之后:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        currentWinnerLabel = (TextView)findViewById(R.id.currentWinnerLabel);

...

请输入活动代码。同时标记第22行。
TextView currentWinnerLabel=(TextView)findViewById(R.id.currentWinnerLabel)
需要在
setContentView()之后,而不是在methodDone之外。还有别的吗?该死!我刚意识到你提到了这件事。非常感谢你指出这一点。这就是几个月后你接触一种语言时发生的事情!代码现在运行得很好。您想将此添加为答案还是我应该删除此问题?请输入活动代码。同时标记第22行。
TextView currentWinnerLabel=(TextView)findViewById(R.id.currentWinnerLabel)
需要在
setContentView()之后,而不是在methodDone之外。还有别的吗?该死!我刚意识到你提到了这件事。非常感谢你指出这一点。这就是几个月后你接触一种语言时发生的事情!代码现在运行得很好。你想添加这个作为答案还是我应该删除这个问题?
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        currentWinnerLabel = (TextView)findViewById(R.id.currentWinnerLabel);

...