【问题标题】:How can I display an integer that counted the time from my game in my endscreen? [duplicate]如何在我的最终屏幕中显示一个整数来计算我的游戏时间? [复制]
【发布时间】:2021-03-06 10:24:16
【问题描述】:

我正在制作一个简单的游戏来学习如何使用 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() 来创建一个应该显示计时器的文本视图:

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) 

error

【问题讨论】:

标签: java android android-intent


【解决方案1】:

我认为,当您在结束活动时,您正在调用 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());
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-28
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多