2013-10-25 21 views
41

ネット全体には、edittext.getText().toString()のような例があります。私はヌルチェックを見ない。ドキュメントでは、これは決してnullではないと言う声明は表示されません。EditText.getText()はnullを返しますか?

でも、観察は何を言いますか。これはこれまでにnullを返しますか?

+0

あなたのコードは... – morroko

+0

String s = edittext.getText()。toString(); if(s!= null)がtrueを返します。 –

+3

私の質問は、EditText.getText()はnullを返しますか?その場合は@tspあなたのコードはNPEになります。 – AppleGrew

答えて

53

getText()nullを返しません。したがって、次の方法ではNPEの可能性はありません。 EditText自体はnull正しく初期化されていないことができます場合は、そこで次のことがありませんNPE

editText.getText().toString(); 
+24

ボーナスとして、 'setText(null)'さえできません。しようとすると内部的に変換されます(http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/widget/TextView.java #TextView.setText%28java.lang.CharSequence%2Candroid.widget.TextView.BufferType%2Cboolean%2Cint%29)それを空の文字列に変換します。 – Geobits

+2

'TextView'のソースコードをチェックすると' getText() 'が決して' null'を返さないことがわかります。 – d3m0li5h3r

+1

EditTextは行いませんが、EditTextPreferenceはnullを返し、防止されていない場合はNPEを引き起こします。 –

-7

は、私はそれが今までnullを返しますと思ういけないこのよう

String edittext = edittext.getText().toString(); 
if(edittext.length==0){ Log.d("null","the valueis null")}; 
+2

私はそれを落とした人ではありませんが、あなたの例では 'edittext'は' null'ではありません。空の文字列です。それが 'null'だった場合、' edittext.length'を呼び出すとNPEがスローされます。また、 'length()'はメソッドBTWです。 – Piovezan

+4

また、 "edittext"をStringとEditText変数の両方の名前として使用しましたが、あなたの回答が質問された質問に対処できませんでした。 – Kuffs

+0

これは、開発者が見ている通りです。 –

1

にしてみてください。

しかし、あなたが返されるテキストは、私が

編集TextUtils.isEmpty()方法を使用することをお勧めかもしれない空であるかどうかを確認する場合: -ドキュメントが返された値については何も述べていません。そして私がソースコードで見たことから、EditTextを初期化すると、デフォルトのテキスト値は""に設定されます。だからそれは返されませんnull

21

をトリガーします間違いなく

getText().toString(); 

null

ではありません何の文字列が、存在しない場合 getTextは空の文字列を返します。 、 EditText.getText()nullを返します。これを確認する一つの方法は、 EditText.getText()のためにAndroidのソースコードをチェックすることです:

EditText.javaショー:

public Editable getText() { 
    return (Editable) super.getText(); 
} 

EditText extends TextViewので、super.getText()への呼び出しがTextView.getText()でなければなりません。今、私たちはそれを返すかを確認するTextView.getText()に移動:

TextView.javaショー:

public CharSequence getText() { 
    return mText; 
} 

は、今、私たちはmTextが今までnullになることができれば知っている必要があります。我々はEditTextコンストラクタはTextViewコンストラクタを呼び出していることを確認したら

public TextView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    mText = ""; 
    … 
} 

たちはmTextTextViewコンストラクタに空の文字列として初期化されていることがわかりTextView.javaソースに深く掘り

public EditText(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

EditText.getText()nullを返すことはできませんが、EditTextがすぐにcted、mTextには、空の文字列の値が与えられます。しかし

、StinePikeが指摘したように、それはgetText()への呼び出しを行ったときに、あなたのEditTextがnullであれば、EditText.getText()はおそらくNPEを引き起こす可能性があります。

0

アプリが空の状態でnullを返したときに、ボタンクリックリスナー内で.getText.toStringを使用すると、ボタンをクリックするとeditTextに入力したテキストが表示されるため、nullが返されます。

関連する問題