java按钮 调用其他类6_Android主类的Button按钮,监听事件里如何调用外部类的方法...

博主在开发2048游戏时遇到问题,点击MainActivity的重玩按钮尝试调用GameView类的startGame()方法重新开始游戏。然而,这导致了空指针异常。问题出在GameView类中调用MainActivity的静态方法getMainActivity()时返回null。解决方案是在调用前进行非空判断,确保在调用startGame()时不抛出异常。
摘要由CSDN通过智能技术生成

问题描述:我是写2048小游戏的时候发现的这个问题,而且一直无法解决。

1,这个是我的主类MainActivity,里面根据id添加了一个重玩按钮,我想实现点击按钮的时候重新开始游戏(没开通博客无法上传照片,我就发代码了)

MainActivity.java代码:

public class MainActivity extends Activity {

public MainActivity() {

mainActivity = this;

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

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

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

clearButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

System.out.println("重新玩 被电击了");

GameView g = new GameView(getMainActivity());

g.startGame();

}

});

}

2,逻辑实现类代码:

//GameView.java代码,其中GameView继承了GridLayout

public class GameView extends GridLayout {

public GameView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

initGameView();

}

public GameView(Context context) {

super(context);

initGameView();

}

public GameView(Context context, AttributeSet attrs) {

super(context, attrs);

initGameView();

}

…………

…………

public void startGame() {

if (MainActivity.getMainActivity() != null) // 报空指针,添加此句判断即可

// 计分系统给清零

MainActivity.getMainActivity().clearScore();

// 开始游戏前,可能有的值不是0,那么我们清理一下

for (int y = 0; y < 4; y++) {

for (int x = 0; x < 4; x++) {

cardsMap[x][y].setNum(0);

}

}

// 清理后再添加俩随机数

addRandomNum();

addRandomNum();

}

3,MainActivity的Button监听里,有这么一句代码,就是上面加颜色的代码:

GameView g = new GameView(getMainActivity());

g.startGame();

这样调用不会报错,但不会运行。而按照Eclipse的提示,蓝色部分的参数为Context形式,这个形式怎么写才能正确运行?

希望各位朋友能够帮我解决这个问题,我没想到一个简单的调用就这么为难。感谢!!

log:

03-21 05:33:52.583: I/System.out(3294): 重新玩 被电击了

03-21 05:33:52.583: D/AndroidRuntime(3294): Shutting down VM

03-21 05:33:52.587: W/dalvikvm(3294): threadid=1: thread exiting with uncaught exception (group=0xa6184908)

03-21 05:33:52.599: E/AndroidRuntime(3294): FATAL EXCEPTION: main

03-21 05:33:52.599: E/AndroidRuntime(3294): java.lang.NullPointerException

03-21 05:33:52.599: E/AndroidRuntime(3294): at com.wang.my2048.GameView.startGame(GameView.java:115)

03-21 05:33:52.599: E/AndroidRuntime(3294): at com.wang.my2048.MainActivity$1.onClick(MainActivity.java:32)

03-21 05:33:52.599: E/AndroidRuntime(3294): at android.view.View.performClick(View.java:4204)

03-21 05:33:52.599: E/AndroidRuntime(3294): at android.view.View$PerformClick.run(View.java:17355)

03-21 05:33:52.599: E/AndroidRuntime(3294): at android.os.Handler.handleCallback(Handler.java:725)

03-21 05:33:52.599: E/AndroidRuntime(3294): at android.os.Handler.dispatchMessage(Handler.java:92)

03-21 05:33:52.599: E/AndroidRuntime(3294): at android.os.Looper.loop(Looper.java:137)

03-21 05:33:52.599: E/AndroidRuntime(3294): at android.app.ActivityThread.main(ActivityThread.java:5041)

03-21 05:33:52.599: E/AndroidRuntime(3294): at java.lang.reflect.Method.invokeNative(Native Method)

03-21 05:33:52.599: E/AndroidRuntime(3294): at java.lang.reflect.Method.invoke(Method.java:511)

03-21 05:33:52.599: E/AndroidRuntime(3294): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)

03-21 05:33:52.599: E/AndroidRuntime(3294): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)

03-21 05:33:52.599: E/AndroidRuntime(3294): at dalvik.system.NativeStart.main(Native Method)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值