2015-11-12 27 views
6

üretebilir Bunları çağrıların çok var:findViewById() NullPointerException

(ListView) getView().findViewById(R.id.main_list_view); 
(TextView) getView().findViewById(R.id.items_no); 
.... 

ve AndroidStudio onlar NullPointerException procude olabileceğini söylüyor:

Yöntem çağırma getView().findViewById(R.id.main_list_view) java.lang.NullPointerException az üretebilir .. (Ctrl + F1)

Bu inceleme, olasıbildirimlerini raporlamak için yöntem kontrol ve veri akışını analiz eder. Her zaman doğru ya da yanlış olankoşulları, değeri olan ve sabit olduğu ispatlanan ifadeler ve nullability kontraktür ihlallerine yol açabilecek durumlar. @Nullable veya @NotNull olarak işaretlenmiş

değişkenler, yöntem parametreleri ve dönüş değerleri (sırasıyla, ya boş olan) null olarak kabul edilir ve nullability sözleşmeler, örneğin kontrol etmek için analiz esnasında kullanılan Report NullPointerException hataları düzeltildi.

Daha karmaşık sözleşmeler, örneğin @Contract ek açıklama kullanılarak tanımlanabilir:

@Contract("_, null -> null") - ikinci bağımsız değişken, aksi boş ve boş değilse yöntem null döndürür - ikinci bağımsız değişken @Contract("_, null -> null; _, !null -> !null") boş ise, yöntem null döndürür

@Contract("true -> fail") - doğru kendisine

denetim yapılandırılabilir geçirilir, bir özel durum, tipik bir assertFalse yöntem Özel @Nullable @NotNull ek açıklamaları kullanmak

Neyse ki everithing işleri (varsayılan olarak annotations.jar gelenler kullanılacaktır), ama yapılan bu koda bir gelişme var mı?

+2

Sen kod yazmak istediğiniz olamaz hiç muhtemelen NPE aracılığıyla ? – csmckelvey

+0

ViewHolder kalıbı kullanıyor musunuz? – SKT

+0

@takendarkk hayır, ama neden olduğunu söyleyebilmeyi istiyorum neden – Phate01

cevap

1

Bu nedenle getView() null değerini döndürebilir ve @Nullable olarak ek açıklamada bulunabilir, kaynaklara bakın ve JavaDoc - CTRL + Kodunuzda getView() çağrısına tıklayın.

/** 
* Get the root view for the fragment's layout (the one returned by {@link #onCreateView}), 
* if provided. 
* 
* @return The fragment's root view, or null if it has no layout. 
*/ 
@Nullable 
public View getView() { 
    return mView; 
} 

Sen göstermek ampul için saniye bekleyip (veya Alt tuşuna basın, sizin kodu kendiniz sarın ve uyarı gitmesini veya başka bir şekilde) (findViewById içinde herhangi bir yeri aramayı imleci olması boş olup olmadığını kontrol edebilirsiniz + Enter) ve ardından önerilen çözümlerden birini seçin.

0

, numaralı sorunu ihmal etmelidir;

@ @ DanDar3 yazdı -> getView() null döndürür ve AndroidStudio bunu vurgular. Eğer gerçekten AndroidStudio mutlu etmek istiyorsanız

Ama - yapabilirsiniz emin ...:
Hemen iddia görünümü boş değil:

View view = getView(); 
assert view != null; 
(ListView) view.findViewById(R.id.main_list_view); 
(TextView) view.findViewById(R.id.items_no);