2011-02-07 12 views
1

私はEditTextフィールドのユーザー入力をチェックして条件をトリガーしようとしています。 EditTextからStringcatをlogcatに出力すると、データの変更を見ることができますが、値に対してチェックするString関数は常にfalseを返します。Androidの文字列とEditText関数の問題

if(((EditText)findViewById(R.id.drv_in)).getText().toString().equals("")) { 
    TX_FAIL_TEXT = "Missing Driver ID!"; 
} 
Log.e("SMSDRVERR", ((EditText)findViewById(R.id.drv_in)).getText().toString()); 

このコードでは、「Missing Driver ID!」と表示されます。ノー成功し、これらの他の条件文を試してみました:私は、データがあることを確認することができる

(((EditText)findViewById(R.id.drv_in)).getText().toString().isEmpty()) //does not compile, says cannot find symbol, but the function is in the Android documentation 
(((EditText)findViewById(R.id.drv_in)).getText().toString().length() < 1) //returns false, even for strings of length > 1 

、確かに、logcatを見て、私のデータを見ることにより、ヌルは、ログに表示されません。条件付きで何が問題なの?

最初の送信でデータを挿入しても失敗しません。最初の送信が失敗した場合、データの変更の有無にかかわらず、以降の送信はすべて失敗します。さらに、第1の送信を通過すると、その後のすべての送信に合格する。

さらに、ボタンの最初のクリックでのみ評価される以下の完全なコードに掲載されているその他の条件もあります。

transmit.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     //data validation 
     /////////////////////// 
     boolean valid = true; 
     if(((EditText)findViewById(R.id.drv_in)).getText().toString().equals("")) { 
      TX_FAIL_TEXT = "Missing Driver ID!"; 
      showDialog(DIALOG_FAIL); 
      TX_FAIL_TEXT = "Transmission Failed!"; //reset the dialog fail text to default 
      valid = false; 
     } 
     Log.e("SMSDRVERR", ((EditText)findViewById(R.id.drv_in)).getText().toString()); 
     if(custSpn.getSelectedItemPosition() == 0) { 
      TX_FAIL_TEXT = "Missing Customer Selection!"; 
      showDialog(DIALOG_FAIL); 
      TX_FAIL_TEXT = "Transmission Failed!"; //reset the dialog fail text to default 
      valid = false; 
     } 
     if(prdSpn.getSelectedItemPosition() == 0) { 
      TX_FAIL_TEXT = "Missing Product Selection!"; 
      showDialog(DIALOG_FAIL); 
      TX_FAIL_TEXT = "Transmission Failed!"; //reset the dialog fail text to default 
      valid = false; 
     } 
     if(((Cursor)prdSpn.getItemAtPosition(prdSpn.getSelectedItemPosition())).getString(prdSpn.getSelectedItemPosition()).contains("CAR") || 
       ((Cursor)prdSpn.getItemAtPosition(prdSpn.getSelectedItemPosition())).getString(prdSpn.getSelectedItemPosition()).contains("AUTO") || 
       ((Cursor)prdSpn.getItemAtPosition(prdSpn.getSelectedItemPosition())).getString(prdSpn.getSelectedItemPosition()).contains("TRUCK") 
      ) { 
      //must have make, license# and 1vin 
      if(((EditText)findViewById(R.id.make_in)).getText().toString().equals("")) { 
       TX_FAIL_TEXT = "Vehicle Entry:\n Missing Make/Model!"; 
       showDialog(DIALOG_FAIL); 
       TX_FAIL_TEXT = "Transmission Failed!"; //reset the dialog fail text to default 
       valid = false; 
      } 
      if(((EditText)findViewById(R.id.tag_in)).getText().toString().equals("")) { 
       TX_FAIL_TEXT = "Vehicle Entry:\n Missing Tag Number!"; 
       showDialog(DIALOG_FAIL); 
       TX_FAIL_TEXT = "Transmission Failed!"; //reset the dialog fail text to default 
       valid = false; 
      } 
      if(((EditText)findViewById(R.id.vin1_in)).getText().toString().equals("") || 
        ((EditText)findViewById(R.id.vin2_in)).getText().toString().equals("") || 
        ((EditText)findViewById(R.id.vin3_in)).getText().toString().equals("") || 
        ((EditText)findViewById(R.id.vin4_in)).getText().toString().equals("") || 
        ((EditText)findViewById(R.id.vin5_in)).getText().toString().equals("") || 
        ((EditText)findViewById(R.id.vin6_in)).getText().toString().equals("") || 
        ((EditText)findViewById(R.id.vin7_in)).getText().toString().equals("") || 
        ((EditText)findViewById(R.id.vin8_in)).getText().toString().equals("") 
       ) { 
       TX_FAIL_TEXT = "Vehicle Entry:\n Missing VIN Number!"; 
       showDialog(DIALOG_FAIL); 
       TX_FAIL_TEXT = "Transmission Failed!"; //reset the dialog fail text to default 
       valid = false; 
      } 
     } 
     //Log.e("smsDRVERR",((EditText)smsActivity.this.findViewById(R.id.drv_in)).getText().toString()); 
     //begin transmission 
     /////////////////////// 
     if(valid) { 
      showDialog(DIALOG_TX_PROGRESS); 
      Thread t = new Thread(txRunnable); 
      t.start(); 
     } else { 
      //do things if needed 

     } 
    } 
+0

UPDATE:最初の送信でデータを挿入しても失敗しません。最初の送信が失敗した場合、データの変更の有無にかかわらず、以降の送信はすべて失敗します。さらに、第1の送信を通過すると、その後のすべての送信に合格する。 – moonlightcheese

+1

あなたはelse文を持っていません。したがって、失敗した場合、TX_FAIL_TEXTは「Missing Driver ID!」のままです。 – I82Much

+0

申し訳ありませんが、もともとあまりにも多くのコードを除外しました。いくつかの編集で元の投稿の下に完全なコードを投稿します。 – moonlightcheese

答えて

1

私はコメントとしてこれを投稿したいが、それは長すぎるだろう...

私は問題がないと思いますが、あなたはそれが何を考えています。しかし、どのように成功や失敗を検出しているかについて明確ではないので、という問題は何かを言い表すことはできません。

まず、診断コードを明確にして、あいまいさを取り除いてみましょう。私はあなたがこれを変更することをお勧めしたい:

if(((EditText)findViewById(R.id.drv_in)).getText().toString().equals("")) { 
    TX_FAIL_TEXT = "Missing Driver ID!"; 
} 
Log.e("SMSDRVERR", ((EditText)findViewById(R.id.drv_in)).getText().toString()); 

へ:

final String drv = (EditText)findViewById(R.id.drv_in)).getText().toString(); 
if(drv.equals("") { 
    TX_FAIL_TEXT = "Missing Driver ID!"; 
    Log.e("SMSDRVERR", "Missing ID " + drv); 
} 
else { 
    Log.e("SMSDRVERR", "Found ID" + drv); 
} 

これは、テキストが実際に欠落していたかどうかについてのログ内のすべての可能なあいまいさを排除します。 (これはまた、より読みやすいコードを作成します)。

+0

ありがとうございます。あなたの提案を反映するようにコードを変更しました。興味深いのは、条件が実際に満足しているということです。このコードは実際にダイアログに表示されるテキスト文字列(TX_FAIL_TEXT)を変更します。私の推測では、Dialogが表示されるたびに更新されるのではなく、Dialogが作成され、将来の呼び出しのために保存されるということです。 showDialog(int)への最初の呼び出しでは、ダイアログが作成され、決して変更されません。 iircには、それぞれの呼び出しでDialogを再構築する方法があります。あなたのご意見ありがとうございます。 – moonlightcheese

+1

@moonlightcheese: 'onCreateDialog'でDialogを更新していると思います。その問題は、 'onCreateDialog'は' showDialog'を何回呼び出しても、一度だけ呼び出される(!)ということです。私の推測が正しければ、showDialog()への呼び出しを傍受したいと思う。 'onDialogCreate'メソッドはDialogへの参照をクラスメンバーとして保存します。次に、 'showDialog'を直接呼び出すのではなく、' showDialog'を呼び出すヘルパー関数を呼び出して、保存されたDialogリファレンスを更新します。 (私はそれが十分に明確であることを願って...) –

+0

それはまさにそれでした。 onClick関数の先頭でremoveDialogを呼び出すとこれが修正されました。ありがとう。 – moonlightcheese

0

問題はDialogオブジェクトで実際に発生しています。条件付きで問題ありません。 onClickメソッドの開始時に、次の呼び出しを追加しました:

これは、次回の呼び出し時にAndroidがダイアログを再構築するよう強制します。

EDIT:将来的には、これをonPrepareDialog()を使用してよりエレガントにする方法がありますが、このソリューションは私にとっては簡単でした。