【问题标题】:I've initialized the button but it still says its a Null [duplicate]我已经初始化了按钮,但它仍然说它是 Null [重复]
【发布时间】:2018-06-13 14:36:03
【问题描述】:

当我有一个我正在调用的空值时应该出现 NullPointerException 我不明白调用普通按钮是如何调用它的

6-13 19:22:10.359 19386-19386/com.example.saisriram.thevote E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.saisriram.thevote, PID: 19386
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.saisriram.thevote/com.example.saisriram.thevote.MainPage}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
    at android.app.ActivityThread.access$800(ActivityThread.java:151)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5265)
    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:902)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
    at com.example.saisriram.thevote.MainPage.onCreate(MainPage.java:21)
    at android.app.Activity.performCreate(Activity.java:6033)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
    at android.app.ActivityThread.access$800(ActivityThread.java:151) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5265) 
    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:902) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697) 

这是日志显示的内容,我不明白为什么,这是我在 Main 中的代码:

package com.example.saisriram.thevote;

 import android.app.Activity;
 import android.content.Intent;
 import android.os.Handler;
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 import android.view.View;
 import android.view.Window;
 import android.view.WindowManager;
 import android.widget.Button;
 import android.widget.ImageButton;

 public class MainPage extends Activity {
 public static int NO_TIME = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Button mainPage = (Button)findViewById(R.id.mainPage);

    mainPage.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View view) {

            new Handler().postDelayed(new Runnable() {
                @Override
                public void run(){
                    Intent intent = new Intent(MainPage.this, HeadBoy.class);
                    startActivity(intent);
                    finish();
                }
            }, NO_TIME);
        }
    });
    ImageButton resultClick = (ImageButton) findViewById(R.id.resultClick);
    resultClick.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MainPage.this, Results.class);
            startActivity(intent);
        }
    });

    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main_page);


}
}

我搜索了那个错误,它说它是在按钮未初始化时发生的,但我确实初始化了我的,所以我没有弄错。

【问题讨论】:

  • 请分享布局文件。

标签: android performance android-layout nullpointerexception


【解决方案1】:

在通过setContentView(int) 实际设置活动内容之前,您正在使用findViewById(int) 搜索View

Button mainPage = (Button)findViewById(R.id.mainPage);之前致电setContentView(R.layout.activity_main_page);

【讨论】:

  • 正确答案。如果发生这种情况,IMO Android Studio 实际上应该发出警告。
  • 谢谢它的工作原理!还有一个疑问,当我运行这个应用程序并按下按钮时,下一个活动打开前需要几秒钟,并且在日志中它说跳过了 main 上的太多活动线程,我该如何解决这个问题?
  • @Saisriram 这可能是由于 HeadBoy Activity 中的一些大图像,因此需要花费大量精力来为 Activity 之间的过渡设置动画。如果是这种情况,请降低图像分辨率。
  • 其他活动中没有图像,我仍然需要添加它们,并且在 MainActivity 中只有一个 Image 按钮,它位于 drawable-nodpi 文件夹中,它仍然滞后我不知道为什么。我如何将图像调整为较低的分辨率,是否只需将它们拖到较小的尺寸?
  • 如果没有看到你的第二个Activity中的代码,很难帮你找出问题。由于它与此问题无关并且评论空间受到严重限制,因此您应该在 SO 上创建另一个问题,并提供您面临的新问题的具体示例
猜你喜欢
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多