2013-06-24 7 views
9

Jestem trochę zdezorientowany w Android Studio. Nie widziałem wcześniej tego typu błędów w Eclipse.Wywołanie metody niedokładnego błędu w Android Studio

przykład:

FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction tf = fragmentManager.beginTransaction(); 
    Fragment oldFragment = fragmentManager.findFragmentByTag(AddDialogFragment.TAG); 

kod ten działa dobrze, ale fragmentManager.beginTransaction(); zostanie podświetlony i mówi: Metoda inwokacja „fragmentManager.beginTransaction” może produkować „java.lang.NullPointerException” mniej ... (Ctrl + F1)

Kontrola ta zgłasza tych warunków w określonym zakresie kontroli, które są zawsze prawdziwe, czy false, a także wskazuje miejsce, w którym może zostać wywołany wyjątek RuntimeException, w oparciu o analizę przepływu danych w kodzie. Ta inspekcja zgłasza również naruszenia umowy Nullable/NotNull. Adnotacje do obsługi umowy można skonfigurować (domyślnie stosowane będą adnotacje @ Nullable/@ NotNull z adnotations.jar)

Czy muszę wcześniej sprawdzać wartość Null?

FragmentManager fragmentManager = getFragmentManager(); 
    if(fragmentManager != null) 
     FragmentTransaction tf = fragmentManager.beginTransaction(); 
    Fragment oldFragment = fragmentManager.findFragmentByTag(AddDialogFragment.TAG); 

Nigdy nie widziałem tego w żadnym Przypowieściach ani Przykładach wcześniej. Jeśli to głupie pytanie, to przepraszam, ale jestem wciąż początkującym :) .

+0

na zamówienie aby uniknąć NPE, zawsze musisz sprawdzić, czy zwrócona referencja jest pusta. – Blackbelt

Odpowiedz

11

Z tego, co widziałem, Android Studio pokazuje zbyt wiele ostrzeżeń o potencjale NullPointerExceptions, nawet dla metod, które nigdy nie zwrócą wartości NULL. Po prostu ignoruję niektóre z nich, ale warto je dokładnie sprawdzić, ponieważ czasami tęskniłem za ważną.

Jeśli spojrzeć na kod źródłowy Androida, to łatwo zauważyć, że getFragmentManager() nigdy nie zwróci null:

public FragmentManager getFragmentManager() { 
    return mFragments; 
} 

Gdzie mFragments jest przypisany tylko raz przez cały Klasa:

final FragmentManagerImpl mFragments = new FragmentManagerImpl(); 
+0

Ok Widzę. Dzięki za tą informację. – Katamave

+0

Czy istnieje szansa na zmniejszenie takiej gadatliwości? IDEA nie ma takiego problemu. – mente

+0

@mente Najprawdopodobniej zostanie to naprawione w przyszłości. Ostatnia wersja pokazuje już mniej ostrzeżeń niż wcześniej. – Dalmas