1

私はAndroid開発の初心者です。私のプロジェクトでは、TableLayout を作成しました。GridLayout の方が役立つと思いますが、GridLayout に慣れていないため、TableLayout を使用しました。いくつかの EditTexts を使用して、ユーザーから値を取得します。アクティビティは実際には送信可能なフォームです。各 EditText の左側には、対応する EditText から期待される内容を定義する TextView があるため、EditText のデフォルト テキスト (通常はヒントとして使用される) を設定する必要はなく、設定しませんでした。このアクティビティには、このフォームを送信するためのボタンもあります。EditText を MUST_FILLED として選択したので、ボタンのカスタム リスナー クラスで、これらの MUST_FILLED が入力されているかどうかを確認する必要があります。次のようにコーディングした直感に従ってください。

String s4 = machine_id.getText().toString().trim();
if(s4 == null || s4 == ""){
    Toast.makeText(v.getContext(), 
            "Please Input the machine ID", Toast.LENGTH_SHORT).show();
}

ここの machine_id はandroid:idEditText 用です。このコードは最終的にトーストが表示されません。android:textしたがって、手動で定義されていなくても、 EditText のデフォルトのテキスト値があると思います。次に、自分の考えを確認するために簡単なプロジェクトを書きました。ここに MainActivity.java があります

public class EditText_testActivity extends Activity implements View.OnClickListener{
/** Called when the activity is first created. */
private String text;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        EditText et = (EditText)findViewById(R.id.et01);
        text = et.getText().toString();

        Button btn = (Button)findViewById(R.id.btn01);
        btn.setOnClickListener(this);
    }

@Override
public void onClick(View v) {
    if(text != null)
        Toast.makeText(v.getContext(), text, Toast.LENGTH_SHORT).show();
    else
        Toast.makeText(v.getContext(), "null", Toast.LENGTH_SHORT).show();

}
}

そしてmain.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et01" />
    <Button 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:id="@+id/btn01"
        android:text="TouchMe"/>

</LinearLayout>

トーストが表示されるため、EditText にデフォルトのテキスト値があることが証明されましToast.makeText(v.getContext(), text, Toast.LENGTH_SHORT).show();た。ただし、空白のように見えますが、実際にはそうではありません。

最後に、EditText の android:text のデフォルト値が何なのか気になります。

前もって感謝します。

4

5 に答える 5

4

デフォルト値は空の文字列だと思います。null になることはありません。その場合、この行ですでに NullPointerException が発生しているはずです。

String s4 = machine_id.getText().toString().trim();

コードを見ると、トーストが表示されなかった理由は(s4 == null || s4 == "")、if 条件として使用したためです。==演算子は.equals()とは異なります。"".equals(s4)代わりに条件を変更してみてください。

于 2012-06-05T15:38:09.540 に答える
2

デフォルトは空の文字列のようです:"" 私のプログラムではうまくいきました。

于 2012-12-09T17:03:21.770 に答える
2

EditTextあなたが直面している問題のデフォルト値はありません。文字列はオブジェクトであるため、文字列の不適切な一致が原因です。

s4 == "";

文字列ではなくオブジェクト参照を一致させるようなものなので、使用する必要があります

s4.equals("");

代わりに上記。

于 2012-06-05T15:34:56.227 に答える
1

実行する前にnullチェッカーを使用する

machine_id.getText().toString().trim();

そしてまた使用

s4.isEmpty();

(一部のAndroidバージョン)または

s4.length()==0;

方法。

文字列には実際の値ではなく参照をチェックするため、==を使用しないでください

于 2012-06-05T15:37:51.320 に答える
0

文字列を比較する正しい方法は、

s1.equals(s2)

こんな使い方

if(s4.equals(null)||s4.equals("")){
    Toast.makeText(v.getContext(), 
            "Please Input the machine ID", Toast.LENGTH_SHORT).show();
}
于 2012-06-05T15:44:03.490 に答える