2013-10-25 14 views
41

Trên tất cả các mạng, tôi thấy các ví dụ như edittext.getText().toString(). Tôi không thấy bất kỳ kiểm tra null nào. Trong tài liệu tôi không thấy bất kỳ tuyên bố nào có thể nói rằng điều này sẽ không bao giờ là rỗng.EditText.getText() có trả về null không?

Tuy nhiên, các quan sát nói gì; điều này có bao giờ trả về null không?

+0

qua mã của bạn ... – morroko

+0

Chuỗi s = edittext.getText(). ToString(); if (s! = null) trả về true; –

+3

Câu hỏi của tôi là, EditText.getText() có bao giờ trả về null không? @tsp mã của bạn sẽ dẫn đến NPE trong trường hợp đó. – AppleGrew

Trả lời

53

getText() sẽ không trả lại null. Vì vậy, không có cơ hội cho NPE trong phương pháp sau đây. các getText sẽ trở lại chuỗi rỗng nếu không có dây, mà chắc chắn là không null

getText().toString(); 

Tuy nhiên, EditText chính nó có thể null nếu không được khởi tạo đúng cách, Vì vậy sau đây sẽ kích hoạt NPE

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

Là một tiền thưởng, bạn thậm chí không thể 'setText (null)'. Nếu bạn thử nó sẽ nội bộ [chuyển đổi] (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) nó vào một chuỗi rỗng. – Geobits

+2

Nếu bạn kiểm tra mã nguồn của 'TextView' thì bạn sẽ thấy' getText() 'sẽ không bao giờ trả về' null'. – d3m0li5h3r

+1

EditText sẽ không, nhưng EditTextPreference sẽ trả về null và gây NPE nếu không được ngăn chặn. –

-7

thử theo cách này

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

Tôi không phải là người downvoted nó, nhưng trong ví dụ của bạn 'edittext' không phải là' null', nó là một chuỗi rỗng. Nếu nó là 'null', gọi' edittext.length' sẽ ném NPE. Ngoài ra 'length()' là một phương thức BTW. – Piovezan

+4

Ngoài ra, bạn đã sử dụng "edittext" làm tên của cả chuỗi và biến EditText và câu trả lời của bạn không giải quyết được câu hỏi. – Kuffs

+0

thats chỉ là một ví dụ ofcourse một nhà phát triển biết điều này :) –

1

Tôi không nghĩ như vậy nó sẽ không bao giờ quay trở lại null.

Nhưng nếu bạn muốn kiểm tra xem văn bản trả lại là trống hay không tôi có thể đề nghị sử dụng phương pháp TextUtils.isEmpty()

Chỉnh sửa: - Các tài liệu không khẳng định bất cứ điều gì liên quan đến giá trị trả về. Và từ những gì tôi đã thấy trong mã nguồn là khi bạn khởi tạo EditText, giá trị văn bản mặc định được đặt thành "". Vì vậy, nó sẽ không bao giờ trả lại null

21

Không , EditText.getText() không bao giờ trả lại null. Một cách để xác minh điều này là để kiểm tra mã nguồn Android cho EditText.getText():

EditText.java show:

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

Kể từ EditText extends TextView, cuộc gọi đến super.getText() phải TextView.getText(). Bây giờ chúng ta chuyển sang TextView.getText() để xem những gì nó sẽ trả về:

TextView.java show:

public CharSequence getText() { 
    return mText; 
} 

Bây giờ chúng ta cần phải biết nếu mText bao giờ có thể là null.

Đào sâu hơn vào nguồn TextView.java chúng ta thấy rằng mText được khởi tạo như một chuỗi rỗng trong constructor TextView:

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

Khi chúng ta thấy rằng các nhà xây dựng EditText gọi TextView constructor:

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

chúng tôi có thể an toàn kết luận rằng EditText.getText() không bao giờ có thể trả lại null, bởi vì ngay sau khi EditText được hiểu cted, mText được gán một giá trị của một chuỗi rỗng.

Tuy nhiên, như StinePike chỉ ra, EditText.getText() có thể có thể gây ra một NPE nếu EditText của bạn là null khi nó làm cho các cuộc gọi đến getText().

0

nó sẽ trả về giá trị rỗng vì khi ứng dụng chạy trống và trả về giá trị rỗng, hãy sử dụng .getText.toString bên trong trình nghe nhấp nút, bây giờ khi bạn nhấp vào nút, nó sẽ nhận được văn bản bạn đã nhập trên editText.

Các vấn đề liên quan