2013-10-25 60 views
41

遍佈網絡我看到的例子如edittext.getText().toString()。我沒有看到任何空的檢查。在文檔中,我沒有看到任何可以說這永遠不會爲空的聲明。EditText.getText()是否返回null?

不過,這些觀察結果是怎麼說的;這是否會返回null?

+0

過去了您的代碼... – morroko

+0

String s = edittext.getText()。toString();如果(s!= null)返回true; –

+3

我的問題是,EditText.getText()會返回null嗎?在這種情況下,您的代碼將導致NPE。 – AppleGrew

回答

53

getText()不會返回null。所以NPE在下面的方法中沒有機會。該getText將返回空字符串,如果沒有字符串,它絕對不是null

getText().toString(); 

然而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

嘗試以這種方式

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

我不這麼認爲它永遠不會返回null

但是,如果你想查詢返回的文本是否爲空可能我建議使用TextUtils.isEmpty()方法

編輯: -文檔沒有規定關於返回的任何有價值的東西。從我在源代碼中看到的是,當初始化EditText時,默認文本值設置爲""。所以它永遠不會返回null

21

無,EditText.getText()永不返回null。驗證這一點的方法之一是檢查Android源代碼爲EditText.getText()

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可能永遠不會空。

挖掘更深的TextView.java源,我們看到mText被作爲TextView構造一個空字符串初始化:

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

一旦我們看到EditText構造函數調用構造函數TextView

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

我們可以安全地得出結論EditText.getText()永遠不會返回null,因爲只要EditText被解析給予mText一個空字符串的值。

然而,作爲StinePike指出,EditText.getText()都不可能導致NPE如果您的EditText是null它使呼叫getText()時。

0

它會返回null,因爲當應用程序運行它的空並且它返回null時,在按鈕點擊偵聽器中使用.getText.toString,現在當您單擊按鈕時,它將獲得您在editText上輸入的文本。

相關問題