2012-01-27 3 views
3

Я написал службу, которая должна быть проинформирована об изменениях в подключении. Я написал BroadcastReceiver для этого:NullPointerException при вызове registerBroadcast

public class ConnectivityBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     ConnectivityManager con = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     // ... 
    } 
} 

и я уже добавил его к моему AndroidManifest.xml:

<application> <!-- ... --> 
    <receiver android:name="com.mycompany.mobile.android.services.impl.ConnectivityBroadcastReceiver" 
       android:label="NetworkConnection"> 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
     </intent-filter> 
    </receiver> 
</application> 

Но когда я пытаюсь зарегистрировать приемник так:

class MyService extends Service { 
    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     this.registerReceiver(new ConnectivityBroadcastReceiver(this), new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 

     return START_STICKY; 
    } 
} 

Я получаю NPE:

java.lang.NullPointerException 
    at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:308) 
    at com.mycompany.mobile.android.services.impl.MyService.onStartCommand(...) 

, который встречается в строке, где я вызываю registerReceiver. Ни ConnectivityBroadcastReceiver, ни IntentFilter не могут быть нулевыми, или я ошибаюсь? Пропустил ли я реализовать метод? Является ли вызов в onStarCommand незаконным?

+0

http://stackoverflow.com/questions/5856861/why-android-service-crashes-with-nullpointerexception – Ishtar

ответ

1

Я не уверен, почему вы получаете nullpointerException, но вы будете регистрировать Receiver в onCreate() вашего Service.

Кроме того, вы не опубликовали полный стек. Если вы смотрите дальше вниз, должна быть информация, указывающая на то, где ошибка происходит внутри вашего кода.

1

Возможно, вы давно решили свою проблему, но решение может быть полезно для google wanderers.

У меня был такой же NPE внутри IntentService. Я попытался зарегистрировать приемник в конструкторе этой службы. Он начал работать, когда я переместил регистрацию на onHandleIntent().

Также мне не нужен ресивер, который перенес бы мое приложение, поэтому я только что создал и зарегистрировал его за пределами AndroidManifest.

Это выглядит следующим образом:

private final BroadcastReceiver connectivityReceiver = new BroadcastReceiver(){ 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     //do your thing 

    } 

}; 

public MyService() { 
    super("MyService"); 

} 

@Override 
protected void onHandleIntent(Intent intent) { 

    registerReceiver(connectivityReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 

    //do your thing 

} 
+0

Честно говоря, я даже не могу вспомнить, как мы решили его , Я также удивляюсь, почему я никогда не отвечал на комментарий, высказанный LuxuryMode. Во всяком случае, у меня есть надпись за то, что я оставил ответ другим людям. – wonderb0lt

Смежные вопросы