簡體   English   中英

條件中的意圖不起作用

[英]Intent in condition doesn't work

我試過搜索這個話題,但我沒有找到任何對我有幫助的東西,所以我在這里問這個。

我是初學者,所以我不懂很多術語,如果您回答我的問題,請嘗試使用簡單的語言,以便我理解。

我有一個條件,即比較兩個列表相同位置的元素,如果它們不相等,則跳轉到另一個活動:

if (randomColors.get(i) != userColors.get(i)) {
    Intent i = new Intent( GameActivity.this, GameOverActivity.class);
    startActivity(i);
}

它在調試中顯示一個我無法解決的錯誤:

java.lang.RuntimeException: 無法啟動活動 ComponentInfo{com.gabie212.simonsays/com.gabie212.simonsays.GameOverActivity}: java.lang.NullPointerException: 嘗試調用虛擬方法 'void android.view.View.setOnClickListener(android. view.View$OnClickListener)' 在一個空對象引用上

請幫助我,我是初學者,我不知道我的代碼有什么問題,因為我完全按照他們在課堂上教我們的方式完成了...

這是完整的代碼,我知道它不是最好的,但它正在進行中

    package com.gabie212.simonsays;

    import android.content.Context;
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;

    import java.util.ArrayList;

    public class GameActivity extends AppCompatActivity implements 
    View.OnClickListener {

private int i = 0;
private Thread t = new Thread();
private Button greenButton;
private Button redButton;
private Button blueButton;
private Button yellowButton;
private Button startButton;

private ArrayList<Integer> randomColors = new ArrayList<Integer>();
private ArrayList<Integer> userColors = new ArrayList<Integer>();

private GameManger gm;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    gm =  new GameManger(this);

    setContentView(R.layout.activity_game);
    greenButton = (Button) findViewById(R.id.btnGreen);
    redButton = (Button) findViewById(R.id.btnRed);
    blueButton = (Button) findViewById(R.id.btnBlue);
    yellowButton = (Button) findViewById(R.id.btnYellow);
    startButton = (Button) findViewById(R.id.btnStart);
    startButton.setOnClickListener(this);
    greenButton.setOnClickListener(this);
    redButton.setOnClickListener(this);
    blueButton.setOnClickListener(this);
    yellowButton.setOnClickListener(this);





}

@Override
public void onClick(View v) {

    int num;

    num= gm.getColor(4);
    randomColors.add(num);


    android.os.Handler handler = new android.os.Handler();
    //TODO if the start button is pressed multiple times simultaneously it starts the lightup loop multiple times simultaneously
    if (v.getId() == startButton.getId()) {
        for (i = 0; i < randomColors.size(); i++) //light up loop
        {
            switch (randomColors.get(i)) {
                case 1:
                    greenButton.setBackgroundResource(R.drawable.greenlightup);

                    handler.postDelayed(new Runnable()
                    {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            greenButton.setBackgroundResource(R.drawable.green);
                        }
                    }, 2000);


                    break;
                case 2:
                    redButton.setBackgroundResource(R.drawable.redlightup);
                    handler.postDelayed(new Runnable()
                    {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            redButton.setBackgroundResource(R.drawable.red);
                        }
                    }, 2000);


                    break;
                case 3:
                    blueButton.setBackgroundResource(R.drawable.bluelightup);
                    handler.postDelayed(new Runnable()
                    {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            blueButton.setBackgroundResource(R.drawable.blue);
                        }
                    }, 2000);


                    break;
                case 4:
                    yellowButton.setBackgroundResource(R.drawable.yellowlightup);
                    handler.postDelayed(new Runnable()
                    {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            yellowButton.setBackgroundResource(R.drawable.yellow);
                        }
                    }, 2000);


                    break;
            }
            handler.postDelayed(new Runnable()
            {
                public void run() {
                }

            }, 2000);
        }

        for(i=0;i<randomColors.size();i++)
        {

            if(v.getId()==greenButton.getId())
            {
                userColors.add(1);
            }
            else
            {
                if(v.getId()==redButton.getId()){
                    userColors.add(2);
                }
                else
                {
                    if(v.getId()==blueButton.getId())
                    {
                        userColors.add(3);
                    }
                    else
                    {
                        userColors.add(4);
                    }
                }


            }


        }
        for(i=0;i<randomColors.size();i++)
        {
            if(randomColors.get(i)!=userColors.get(i))
            {

                Intent i = new Intent( GameActivity.this, GameOverActivity.class);
                startActivity(i);
            }
        }



    }

}
}

由於它不是一個簡單的空指針異常,至少我不這么認為,因為這里沒有什么可以為空的,if 語句中只有一個簡單的意圖

這是游戲結束活動的代碼

    package com.gabie212.simonsays;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;



    public class GameOverActivity extends AppCompatActivity implements View.OnClickListener  {

    private Button againButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game_over);
        againButton = (Button) findViewById(R.id.btnStart);
        againButton.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {

        Intent in = new Intent(GameOverActivity.this, GameActivity.class);
        startActivity(in);
    }
    }

提前致謝。

在您的GameOverActivity ,在這一行:

againButton = (Button) findViewById(R.id.btnStart);

當您從主活動布局 ( activity_game.xml ) 引用btnStart ,您的againButtonnull 這無法找到,因為您的GameOverActivity使用activity_game_over.xml作為其布局:

setContentView(R.layout.activity_game_over);

任何視圖都需要在activity_game_over.xml文件中定義,以便activity_game_over.xml使用它們。 您需要引用layout/activity_game_over.xml定義的按鈕 ID

againButton = (Button) findViewById(R.id.btnAgain); // Or whatver you've named it

至於您關於為什么Intent不工作的具體問題, Intent本身工作正常,只是由於上述問題GameOverActivity無法正常啟動,因此您的應用程序崩潰。

暫無
暫無

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

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