为什么下面的 Java 代码不起作用?

Why does the Java code below not work?

我需要在这个activity中启动倒数计时器。它应该从按钮开始。下面我带来了代码片段。

我认为我做的一切都是正确的,但它不起作用 - 这是为什么?

public class Step5 extends AppCompatActivity {


Button mgo;
public TextView timer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.step5);
    timer = (TextView) findViewById(R.id.timer);
    mgo = (Button) findViewById(R.id.go);

    mgo.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        new CountDownTimer(900000,1000) {
            @Override

            public void onTick(long millisUntilFinished) {
                timer.setText((int)millisUntilFinished/1000);

            }

            @Override
            public void onFinish() {
                timer.setText("Done");

            }
        }.start();
    }
});
}}

xml

中的按钮
<Button
    android:id="@+id/go"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:background="#FF3D00"
    android:textColor="#ffffff"
    android:text="@string/Start"
    android:layout_alignParentBottom="true"/> 

问题出在timer.setText((int)millisUntilFinished/1000);部分。

timer.SetText() 需要一个字符串作为参数。

所以试试下面的 timer.setText(String.valueOf((int)millisUntilFinished/1000));

它将 100% 有效。

问题出在下面的代码片段上:

timer.setText((int)millisUntilFinished/1000);
当您传递 int 类型的参数时,

setText() 方法仅接受 String 作为参数类型。因此,您可以尝试使用 String class 的 valueOf() 静态方法将 int 值类型转换为 String 对象。以下是建议的解决方案:

timer.setText(String.valueOf((int)millisUntilFinished/1000));

不过需要注意的是,如果你编译你提交的代码,你会得到以下编译错误:

error: incompatible types: int cannot be converted to String

这意味着你的代码将被编译错误,你肯定会被编译器注意到。

此外,如果您使用像 Netbeans 这样的 Java IDE,那么您会通过如下通知注意到此错误:

incompatible types: int cannot be converted to String

所以结论是,可以通过阅读 IDE 的警告和作为第二步的编译器消息来避免此类错误。