2011-12-07 30 views
3

私のアンドロイドアプリケーションでzxingを使用してバーコードを取得すると、形式がEAN_13として返されますが、if if staementと判断されない場合はEAN_13が表示されます私のトースト通知で。なぜそれが壊れているかについての手がかりは? JavaではMy java if文が正常に機能していないようです

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent); 
    if (scanResult != null) { 
     if (resultCode == 0){ 
      //If the user cancels the scan 
      Toast.makeText(getApplicationContext(),"You cancelled the scan", 3).show(); 
     } 
     else{ 
      String contents = intent.getStringExtra("SCAN_RESULT"); 
      String format = intent.getStringExtra("SCAN_RESULT_FORMAT").toString(); 
      if (format == "EAN_13"){ 
       //If the barcode scanned is of the correct type then pass the barcode into the search method to get the product details 
       Toast.makeText(getApplicationContext(),"You scanned " + contents, 3).show(); 
      } 
      else{ 
       //If the barcode is not of the correct type then display a notification 
       Toast.makeText(getApplicationContext(),contents+" "+format, 3).show(); 
      } 
     } 
    } 
} 

+0

また、何が起こるかを知るために.toString()を追加しましたが、私のif文が間違っています。 –

答えて

7

、あなたは(まあ、はない必要があります)2つの文字列を比較すること==演算子を使用することはできません。あなたが使用する必要があります。

if (stringOne.equals(stringTwo)) { ... } 

それとも、あなたのケースでは:オブジェクトを操作する場合Javaでは

if ("EAN_13".equals(format)) { ... } 

を、二重の等号演算子は参照の等価によって2つのオブジェクトを比較します。あなたは二つの文字列がある場合:

String one = "Cat"; 
String two = "Cat"; 
boolean refEquals = (one == two); // false (usually.) 
boolean objEquals = one.equals(two); // true 

を私は文字列の作成がシステムに実装されている方法に応じて、それは両方の変数が指すようにすることによって、メモリを節約する可能性があるため、それは通常真実ではないだろうと言います同じもののメモリ。しかし、これが動作することを期待するのは非常に貧しい習慣です。

側注:上記の戦略を使用している場合、あなたは最初の文字列がnullないことを確認する必要がある、またはあなたがNullPointerExceptionをスローします。あなたのプロジェクトで外部ライブラリを含めるする能力を持っている場合は、私が可能にApacheのCommonsのラングライブラリを、お勧めします:

StringUtils.equals(stringOne, stringTwo); 
3

あなたは==あなたは、彼らがしているかどうかを確認するために2つの参照を比較している使用オブジェクトの値を比較するのではなく、同じオブジェクト(つまり、それらがメモリ内の同じアドレスを指している)。代わりにformat.equals("EAN_13")を使用してください。

+1

正しいですが、引用符付きのStringで 'equals()'メソッドを呼び出すほうがずっと快適です。 (変数の代わりに)これは、 'format'がnullの場合に' NullPointerException'が発生しないようにします。 –

2

文字列の比較には、.equals()メソッドを使用する必要があります。実際にはこれは2つのオブジェクトの比較を行い、このメソッドはjavaのObjectクラスに属します。 例えば:あなたが同等インターフェース、 e.qに.compareTo()関数を使用することができる一方

 String val = "abc"; 
     if(val.equals("abc")){ 
      System.out.println("stings are equal!"); 
     } 

String val = "abc"; 
if(val.compareTo("abc")==0){ 
    System.out.println("stings are equal!"); 
} 

**これは上記例と同じです

1

Javaでは、あなたはそう.compareTo("str")または.equals()方法でこれらの演算子を交換してください== で文字列を比較することはできません。

関連する問題