0

私は別の問題に直面しています。以下は、保存されたファイルを読み取ることができ、それに応じて状態を確認する必要があるアプリのコードです。

私の入力は「ON」と「OFF」です

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 conditionelseに入ります

else{ start.setChecked(true); }

ここで立ち往生しています。誰か助けてください。

4

4 に答える 4

1

Android は Java に基づいています。Java では、「==」を使用して 2 つの文字列を比較することはできません。置き換える必要があります。

val.toString() == "ON"

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

実は、このコードには 2 つの大きな問題があります。1 つは、常にメソッドを使用してオブジェクトequals()を比較する必要があることです。この演算子は、非常に限られた場合にのみ適切です。String==

2 番目のものはより微妙で、常に壊れることはありません。にデータを読み込む場合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()を比較するために使用しStringます。使用しないでください==

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 に答える