0

我面临一个不同的问题,见下文是我的应用程序的代码,它可以读取存储的文件并必须据此检查条件。

我的输入是“开”和“关”

String val="";
final ToggleButton start = (ToggleButton) findViewById(R.id.startup);
        FileInputStream fileos;
        try {
            fileos = openFileInput("startup");
            byte[] input = new byte[fileos.available()];
            while(fileos.read(input) != -1){
                val += new String(input);
            }
            if(val.toString() == "ON"){
                start.setChecked(true);
            }else if(val.toString() == "OFF"){
                start.setChecked(false);
            }else{
                start.setChecked(true);
            }
            fileos.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

上面的代码正确获取输出“ON”或“OFF”,但它总是进入 else 条件

else{ start.setChecked(true); }

我被困在这里,请帮我一个

4

4 回答 4

1

android是基于java的,在java中你不能使用“==”来比较两个字符串,你应该替换

val.toString() == "ON"

"ON".equals(val.toString())
于 2013-03-12T12:56:22.240 回答
1

这段代码实际上有两个大问题。一是您必须始终equals()使用该方法来比较String对象——运算符仅适用于非常有限的情况。==

第二个更微妙,不会一直中断。当您将数据读入input时,尽管您使用的是循环,但代码仅在一次读取所有数据时才有效。这是因为您正在String从整个数组中创建一个,即使整个数组不包含有效数据。正确的循环如下所示:

int count;
while((count = fileos.read(input)) != -1){
    val += new String(input, 0, count);
}
于 2013-03-12T12:59:51.120 回答
0

用于String.equals()比较Strings。没用==

val.toString().equals("ON")
于 2013-03-12T12:55:08.597 回答
0

您必须使用 .equals() 比较字符串

if(val.equals("ON")){
      start.setChecked(true);
}else if(val.equals("OFF")){
     start.setChecked(false);
}else{
    start.setChecked(true);
}
于 2013-03-12T12:56:12.363 回答