8

Innymi słowy:Czy kiedykolwiek intencja otrzymana przez BroadcastReceiver może być zerowa?

@Override 
public void onReceive(Context context, Intent intent) { 
    final String action = intent.getAction(); // can intent==null here ? 
    // could it ever throw a NPE ? 
} 

muszę rozwiązać ten problem raz na zawsze więc proszę bez ifs i buts. Sprawdziłbym wartość zerową, ale podejrzewam, że nie jest ona potrzebna i dlatego jest niezręczna i nieelegancka w sprawdzaniu. I szukali w docs, ale nie znaleziono niczego

EDIT: zapytał w Google Groups - patrz there dla ciekawych punktów

+0

Rewizja. Dostaję od użytkowników raporty o awariach, które sugerują, że w rzadkich okolicznościach cel może być pusty. –

Odpowiedz

6

onReceive w BroadcastReceiver jest wyzwalany przez Intent z działań, które to zarejestrowany. Więc bez zamiaru jest instancją Intent i nie zerową, metoda onReceive nigdy nie zostanie wywołana.

Mimo to dziwne rzeczy mogą się zdarzyć. Nie przejrzałem kodu napisanego przez Google na temat emisji, więc w jego prawidłowym użytkowaniu nigdy nie będzie miało wartości zerowej, ponieważ sprawdzanie jest dobrym pomysłem, ponieważ pochodzi z kodu, nad którym nie masz kontroli.

+0

Właśnie natknąłem się na tę dokładną sytuację. Moja aplikacja zawiesiła się w wersji 4.2.1, kiedy odmontowałem kartę SD, aw logcat wystąpił NPE w ramach jednego nadpisania BroadcastReceiver.onReceive. Mogłem to z łatwością odtworzyć. Po wykonaniu sprawdzenia zerowego dla argumentu zamiaru aplikacja przestała się zawieszać. – Yegor

+2

Czy mógłbyś opublikować swój kod 'onReceive' i logcat? Może załaduj na pastebin. Gdybyś mógł zachować numery linii w kodzie, które byłyby pomocne. Ciekawi mnie to. – bclymer