我如何在结束屏幕中显示一个计算游戏时间的整数?



我正在制作一个简单的游戏来学习如何使用Android Studio。游戏的目标是尽可能快地完成一些简单的任务。在我的主游戏屏幕中,我设置了一个线程,让int每秒钟计数一次,这样玩家就知道过去了多少时间。当玩家完成所有简单任务后,游戏就会进入结束界面。现在我想在结束屏幕中显示时间,这样玩家就知道他们完成的速度有多快。当我运行游戏时,我得到一个错误。

这是每秒运行一个线程的代码:

Timer d = new Timer(true);
thread1 thread1 = new thread1(this, myCanvas);
t.scheduleAtFixedRate(thread1, 0, 1000); 

这是线程每秒执行的tick函数:

public void tick1(){
timer++;
}

这是计时器的getter:

public int getTimer(){
return timer;
}

当游戏结束并进入结束屏幕时,我使用getTimer()来拥有一个应该显示计时器的textview:

err = (TextView)findViewById(R.id.textView);
err.setText("Tijd: "+ timer+"");

这是我尝试运行它时得到的错误信息:

2021-03-06 11:18:38.153 21729-21729/com.example.test_game E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.test_game, PID: 21729
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test_game/com.example.test_game.Eindscherm}: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.example.test_game.MyCanvas.getTimer()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3792)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3968)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8506)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.example.test_game.MyCanvas.getTimer()' on a null object reference
at com.example.test_game.Eindscherm.onCreate(Eindscherm.java:24)
at android.app.Activity.performCreate(Activity.java:8198)
at android.app.Activity.performCreate(Activity.java:8182)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3765)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3968) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loop(Looper.java:246) 
at android.app.ActivityThread.main(ActivityThread.java:8506) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) 

误差

我认为当你在结束活动时,你正在调用getTimer()方法,该方法在另一个活动中。

所以你不能在活动中这样做。因为活动与JAVA类不同。

你所需要做的就是传递数据到结束活动。别担心,这很简单,我会告诉你怎么做。

在第一个活动:

FirstAcitivity {
// when you want to go to SecondActivity
Intent i = new Intent(context, SecondActivity.class)
//passing the data by Intent
i.putExtra("ex1", yourIntegenr);
}

在第二个活动:

SecondActivity{

//checking the Intent has valid data
if (getIntent().getExtras() != null) {

//getting the data from Intent
int time = getIntent().getExtras().getSerializable("ex1");
yourTextView.setText(time.toString());
}
}

最新更新