簡體   English   中英

當我嘗試在Studio中切換活動時,為什么會收到java.lang.NullPointerException錯誤?

[英]Why am I getting a java.lang.NullPointerException error when I try to switch activities in studio?

我試圖查找是什么原因導致的,但我無法找出原因所在-我正在設置點擊監聽器以激活按鈕開關。 我沒有收到任何錯誤彈出窗口,但是當我運行該應用程序時,它崩潰了,並且logcat顯示我在偵聽器本身上獲取了java.lang.NullPointerException。 這是代碼-

public class MainScreen extends AppCompatActivity {

Button btn;


@Override
protected void onCreate(Bundle savedInstanceState) {

    btn = (Button) findViewById(R.id.mainTypesBtn);



    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(MainScreen.this, MainTypes.class));
        }
    });




    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_loading_screen);
}

我在btn.setOnClickListener(new View.OnClickListener() {

MainTypes是第二個活動,其中沒有任何內容。

第一:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loading_screen);

之后:

@Override
protected void onCreate(Bundle savedInstanceState) {

然后你做:

btn = (Button) findViewById(R.id.mainTypesBtn);

btn.setOnClickListener(new View.OnClickListener() {

@Override
    public void onClick(View v) {
        startActivity(new Intent(LoadingScreen.this, MainTypes.class));
    }
});

和第二個細節:

LoadingScreen不是您當前的活動...是MainScreen

您在setContentView()之前調用findViewById() setContentView() 嘗試這個:

@Override 
protected void onCreate(Bundle savedInstanceState) {

    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_loading_screen);

    btn = (Button) findViewById(R.id.mainTypesBtn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override 
        public void onClick(View v) {
            startActivity(new Intent(LoadingScreen.this, MainTypes.class));
        } 
    }); 
} 

嘗試這樣的事情。

@Override
protected void onCreate(Bundle savedInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_loading_screen);
    btn = (Button) findViewById(R.id.mainTypesBtn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(LoadingScreen.this, MainTypes.class));
        }
    });
}

實際上setContentView做到了這一神奇,在按鈕將創建的setContentView方法中。 在那之前它只是null

初始化按鈕時尚未設置布局。 因此,首先需要設置布局,然后初始化可以解決問題的按鈕。請嘗試以下操作:

@Override
protected void onCreate(Bundle savedInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_loading_screen);
    Button btn = (Button) findViewById(R.id.mainTypesBtn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          startActivity(new Intent(LoadingScreen.this, MainTypes.class));
        }
    });
}`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM