Android SDK 计时器不起作用



我一直在我的应用程序上编写一个计时器,以便当您点击按钮时,文本会显示一个以 0.1 秒为增量计数的时间。

虽然编码正确,但事实证明,每当我点击手机上的就绪按钮时,应用程序就会崩溃......有人可以给我一个关于出了什么问题的提示。我认为这可能是启动计时器的原因吗?

My OnCreate()

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_double_player);
    Button readyBtn =  (Button) findViewById(R.id.readyBtn);

    readyBtn.setOnClickListener(new View.OnClickListener(){
        public void onClick(View arg0) {

            Button readyBtn =  (Button) findViewById(R.id.readyBtn);
            Spinner selectorLeft = (Spinner) findViewById(R.id.selectorLeft);
            Spinner selectorRight = (Spinner) findViewById(R.id.selectorRight);
            ImageView narLeft = (ImageView) findViewById(R.id.narwhalleft);
            ImageView narRight = (ImageView) findViewById(R.id.narwhalRight);

            selectorLeft.setVisibility(RelativeLayout.GONE);
            selectorRight.setVisibility(RelativeLayout.GONE);
            readyBtn.setVisibility(RelativeLayout.GONE);
            final TextView text = (TextView) findViewById(R.id.timerText);
            final Handler handler;
            text.setText(0);

            handler = new Handler();
            Runnable runnable = new Runnable(){
                boolean ready = true;
                int number = 0;
                @Override
                public void run(){
                    while(ready){
                        try{
                            Thread.sleep(100);
                            }
                        catch(InterruptedException e){
                            e.printStackTrace();
                            }
                        handler.post(new Runnable(){
                            @Override
                            public void run(){
                                number+=0.1;
                                text.setText(String.valueOf(number));
                                }
                            });
                    }
                }
            };
            new Thread(runnable).start();
            narRight.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View arg0) {
                    int clicksNeeded = 100;
                    boolean rightWon = false;
                    int clicksClickedRight = 0;
                    clicksClickedRight = clicksClickedRight + 1;
                    if(clicksClickedRight == clicksNeeded){
                        rightWon = true;
                        }
                    if(rightWon == true){

                    }
                }

            });
            narLeft.setOnClickListener(new View.OnClickListener(){
                public void onClick(View arg0) {
                    int clicksNeeded = 100;
                    boolean leftWon = false;
                    int clicksClickedLeft = 0;
                    clicksClickedLeft = clicksClickedLeft + 1;
                    if(clicksClickedLeft == clicksNeeded){
                        leftWon = true;
                        }
                    if(leftWon == true){

                    }
                }
            });

        }
    });

}

我可以在你的行中看到一个问题:

text.setText(0);

函数的声明是setText(int resid)的,因此它尝试搜索 id 为 0 的字符串资源,但找不到,堆栈跟踪错误:

android.content.res.Resources$NotFoundException: String resource ID #0x0

因此,请将您的行替换为:

text.setText(String.valueOf(0));

第二件事,您已将数字变量声明为 int:

int number = 0;

但是,您正在向其添加一个浮点数:

number+=0.1;

所以宣布它float number = 0;.

要将数字四舍五入到小数点后一位,请使用此技巧,先将数字多个,将其转换为 int 以去除小数位并将其转换回浮点数:

float displaynumber = (float)((int)(number * 10.0))/10.0f;

最新更新