得到了NullPointerEx。当我使用相同的附加功能启动Activity Again时

时间:2012-11-29 14:47:24

标签: android android-intent nullpointerexception

我有一点问题。 我正在做一个小小的TicTacToe-Game。

我有一个开始屏幕,您可以在其中输入播放器名称,并通过putExtra将该字符串赋予游戏活动。它到目前为止工作,Playernames显示在Game-Activity中。

我现在的问题是:如果一名玩家赢了游戏,那么“NewGame” - 按钮就会变得可见。 单击它应该重新启动Game-Activity,其名称与StartScreen中给出的名称相同。

这是它崩溃的地方。

这里是我的代码和logcat:

启动画面:

package de.android.pali;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.ImageButton;

public class TicTacToeMenu extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tic_tac_toe_menu);

    final ImageButton createGame = (ImageButton)findViewById(R.id.newGameButton);
    final EditText spieler1 = (EditText)findViewById(R.id.addsp1);
    final EditText spieler2 = (EditText)findViewById(R.id.addsp2);
    final Intent newGame = new Intent(TicTacToeMenu.this, NewGame.class);

    createGame.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            newGame.putExtra("Name1", spieler1.getText().toString());
            newGame.putExtra("Name2", spieler2.getText().toString());

            startActivity(newGame);


        }
    });


}


}

游戏-活性:

package de.android.pali;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

public class NewGame extends TicTacToeMenu{

int turn = 1;
int[] felder = new int[9];

boolean gotWinner = false;

ImageButton feld1;
ImageButton feld2;
ImageButton feld3;
ImageButton feld4;
ImageButton feld5;
ImageButton feld6;
ImageButton feld7;
ImageButton feld8;
ImageButton feld9;
Button anotherGame;
TextView spieler1;
TextView spieler2;
TextView ergebnis;




public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.game);

    setupUI();


    setOnClickListeners(feld1, feld2, feld3, feld4, feld5, feld6, feld7,
            feld8, feld9);


}

public void setupUI() {

    feld1 = (ImageButton)findViewById(R.id.feld1);
    feld2 = (ImageButton)findViewById(R.id.feld2);
    feld3 = (ImageButton)findViewById(R.id.feld3);
    feld4 = (ImageButton)findViewById(R.id.feld4);
    feld5 = (ImageButton)findViewById(R.id.feld5);
    feld6 = (ImageButton)findViewById(R.id.feld6);
    feld7 = (ImageButton)findViewById(R.id.feld7);
    feld8 = (ImageButton)findViewById(R.id.feld8);
    feld9 = (ImageButton)findViewById(R.id.feld9);

    final TextView spieler1 = (TextView)findViewById(R.id.sp1name);
    final TextView spieler2 = (TextView)findViewById(R.id.sp2name);


    spieler1.setText(getIntent().getStringExtra("Name1").toString());
    spieler2.setText(getIntent().getStringExtra("Name2").toString());

    for(int x=0; x<9; x++){felder[x]=2;};
}

public void setOnClickListeners(final ImageButton feld1,
        final ImageButton feld2, final ImageButton feld3,
        final ImageButton feld4, final ImageButton feld5,
        final ImageButton feld6, final ImageButton feld7,
        final ImageButton feld8, final ImageButton feld9) {
    feld1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            feld1.setEnabled(false);
            feld1.setAlpha(1);
            if(turn==1){
            feld1.setBackgroundResource(R.drawable.o);
            turn = 0;
            felder[0] = 1;
            checkWinner();
            }
            else{
                feld1.setBackgroundResource(R.drawable.x);
                turn = 1;
                felder[0] = 0;
                checkWinner();
            }
        }


    });

    feld2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            feld2.setEnabled(false);
            if(turn==1){
                feld2.setBackgroundResource(R.drawable.o);
                turn = 0;
                felder[1] = 1;
                checkWinner();
                }
                else{
                    feld2.setBackgroundResource(R.drawable.x);
                    felder[1] = 0;
                    turn = 1;
                    checkWinner();

                }
        }
    });

    feld3.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            feld3.setEnabled(false);
            if(turn==1){
                feld3.setBackgroundResource(R.drawable.o);
                turn = 0;
                felder[2] = 1;
                checkWinner();
                }
                else{
                    feld3.setBackgroundResource(R.drawable.x);
                    turn = 1;
                    felder[2] = 0;
                    checkWinner();
                };

        }
    });

    feld4.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            feld4.setEnabled(false);
            if(turn==1){
                feld4.setBackgroundResource(R.drawable.o);
                turn = 0;
                felder[3] = 1;
                checkWinner();
                }
                else{
                    feld4.setBackgroundResource(R.drawable.x);
                    felder[3] = 0;
                    turn = 1;
                    checkWinner();
                }

        }
    });

    feld5.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            feld5.setEnabled(false);

            if(turn==1){
                feld5.setBackgroundResource(R.drawable.o);
                turn = 0;
                felder[4] = 1;
                checkWinner();

                }
                else{
                    feld5.setBackgroundResource(R.drawable.x);
                    turn = 1;
                    felder[4] = 0;
                    checkWinner();
                }

        }
    });

    feld6.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            feld6.setEnabled(false);
            if(turn==1){
                feld6.setBackgroundResource(R.drawable.o);
                turn = 0;
                felder[5] = 1;
                checkWinner();
                }
                else{
                    feld6.setBackgroundResource(R.drawable.x);
                    turn = 1;
                    felder[5] = 0;
                    checkWinner();
                }

        }
    });

    feld7.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            feld7.setEnabled(false);
            if(turn==1){
                feld7.setBackgroundResource(R.drawable.o);
                turn = 0;
                felder[6] = 1;
                checkWinner();
                }
                else{
                    feld7.setBackgroundResource(R.drawable.x);
                    turn = 1;
                    felder[6] = 0;
                    checkWinner();
                }

        }
    });

    feld8.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            feld8.setEnabled(false);
            if(turn==1){
                feld8.setBackgroundResource(R.drawable.o);
                turn = 0;
                felder[7] = 1;
                checkWinner();
                }
                else{
                    feld8.setBackgroundResource(R.drawable.x);
                    turn = 1;
                    felder[7] = 0;
                    checkWinner();
                }

        }
    });

    feld9.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            feld9.setEnabled(false);
            if(turn==1){
                feld9.setBackgroundResource(R.drawable.o);
                turn = 0;
                felder[8] = 1;
                checkWinner();
                }
                else{
                    feld9.setBackgroundResource(R.drawable.x);
                    turn = 1;
                    felder[8] = 0;
                    checkWinner();
                }

        }
    });
}

public int getTurn() {
    int whois = turn;
    return whois;
}

public void checkWinner(){

    ergebnis = (TextView)findViewById(R.id.winners);

    if( (felder[0]==1 & felder[1]==1 & felder[2]==1) || 
        (felder[3]==1 & felder[4]==1 & felder[5]==1) || 
        (felder[6]==1 & felder[7]==1 & felder[8]==1) || 
        (felder[0]==1 & felder[4]==1 & felder[8]==1) || 
        (felder[6]==1 & felder[4]==1 & felder[2]==1) || 
        (felder[0]==1 & felder[3]==1 & felder[6]==1) || 
        (felder[1]==1 & felder[4]==1 & felder[7]==1) || 
        (felder[2]==1 & felder[5]==1 & felder[8]==1)    ){

        ergebnis.setText((getIntent().getStringExtra("Name1").toString()) + " " + getString((R.string.gewinnt)));
        gotWinner = true;

        }else
            { }
    if( (felder[0]==1 & felder[1]==1 & felder[2]==1) || 
            (felder[3]==0 & felder[4]==0 & felder[5]==0) || 
            (felder[6]==0 & felder[7]==0 & felder[8]==0) || 
            (felder[0]==0 & felder[4]==0 & felder[8]==0) || 
            (felder[6]==0 & felder[4]==0 & felder[2]==0) || 
            (felder[0]==0 & felder[3]==0 & felder[6]==0) || 
            (felder[1]==0 & felder[4]==0 & felder[7]==0) || 
            (felder[2]==0 & felder[5]==0 & felder[8]==0)    ){

            ergebnis.setText((getIntent().getStringExtra("Name2").toString()) + " " + (getString(R.string.gewinnt)));
            gotWinner = true;

            }else
                { }

    checkIfGotWinner();

}

public void checkIfGotWinner() {

    anotherGame = (Button)findViewById(R.id.anotherGame);


    if(gotWinner == true){


        anotherGame.setVisibility(1);

        final Intent anotGame = new Intent(NewGame.this,NewGame.class);

            anotGame.putExtra("Name1", spieler1.getText().toString());
        anotGame.putExtra("Name2", spieler2.getText().toString());

        feld1.setEnabled(false);
        feld2.setEnabled(false);
        feld3.setEnabled(false);
        feld4.setEnabled(false);
        feld5.setEnabled(false);
        feld6.setEnabled(false);
        feld7.setEnabled(false);
        feld8.setEnabled(false);
        feld9.setEnabled(false);

        final TextView spieler1 = (TextView)findViewById(R.id.sp1name);
        final TextView spieler2 = (TextView)findViewById(R.id.sp2name);
        final ImageView sp1Icon = (ImageView)findViewById(R.id.sp1icon);
        final ImageView sp2Icon = (ImageView)findViewById(R.id.sp2icon);
        final View trenn = (View)findViewById(R.id.trennlinie);
        ergebnis = (TextView)findViewById(R.id.winners);

        spieler1.setAlpha(0);
        spieler2.setAlpha(0);
        sp1Icon.setAlpha(0);
        sp2Icon.setAlpha(0);
        trenn.setAlpha(0);
        ergebnis.setVisibility(1);


        anotherGame.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                startActivity(anotGame);

            }
        });

    };

    if(feld1.isEnabled()==false & feld2.isEnabled()==false & feld3.isEnabled()==false & feld4.isEnabled()==false & feld5.isEnabled()==false & feld6.isEnabled()==false &
            feld7.isEnabled()==false & feld8.isEnabled()==false & feld9.isEnabled()==false & gotWinner == false){ergebnis.setText(R.string.draw);


            anotherGame.setVisibility(1);

            final Intent anotGame = new Intent(NewGame.this,NewGame.class);



            anotherGame.setOnClickListener(new OnClickListener() {


                @Override
                public void onClick(View v) {



                    startActivity(anotGame);

                }
            });
    }

    else{}
}
}

logcat的:

11-29 15:59:30.681: E/AndroidRuntime(2683): FATAL EXCEPTION: main
11-29 15:59:30.681: E/AndroidRuntime(2683): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.android.pali/de.android.pali.NewGame}: java.lang.NullPointerException
11-29 15:59:30.681: E/AndroidRuntime(2683):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
11-29 15:59:30.681: E/AndroidRuntime(2683):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
11-29 15:59:30.681: E/AndroidRuntime(2683):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
11-29 15:59:30.681: E/AndroidRuntime(2683):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
11-29 15:59:30.681: E/AndroidRuntime(2683):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-29 15:59:30.681: E/AndroidRuntime(2683):     at android.os.Looper.loop(Looper.java:137)
11-29 15:59:30.681: E/AndroidRuntime(2683):     at android.app.ActivityThread.main(ActivityThread.java:4424)
11-29 15:59:30.681: E/AndroidRuntime(2683):     at java.lang.reflect.Method.invokeNative(Native Method)
11-29 15:59:30.681: E/AndroidRuntime(2683):     at java.lang.reflect.Method.invoke(Method.java:511)
11-29 15:59:30.681: E/AndroidRuntime(2683):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-29 15:59:30.681: E/AndroidRuntime(2683):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-29 15:59:30.681: E/AndroidRuntime(2683):     at dalvik.system.NativeStart.main(Native Method)
11-29 15:59:30.681: E/AndroidRuntime(2683): Caused by: java.lang.NullPointerException
11-29 15:59:30.681: E/AndroidRuntime(2683):     at de.android.pali.NewGame.setupUI(NewGame.java:65)
11-29 15:59:30.681: E/AndroidRuntime(2683):     at de.android.pali.NewGame.onCreate(NewGame.java:40)
11-29 15:59:30.681: E/AndroidRuntime(2683):     at android.app.Activity.performCreate(Activity.java:4465)
11-29 15:59:30.681: E/AndroidRuntime(2683):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
11-29 15:59:30.681: E/AndroidRuntime(2683):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
11-29 15:59:30.681: E/AndroidRuntime(2683):     ... 11 more

希望任何人都可以提供帮助。

1 个答案:

答案 0 :(得分:0)

首先,在它自己内部开始相同的活动并不是一个好习惯。就像Snake吞下自己的尾巴一样。所以你需要写一些可以直接重置游戏的逻辑。看起来像用户第一次开始

提示:通过将其设置为空来删除所有变量的值,仅保留用户的名称(创建一个将为您执行此操作的函数)