2012-01-27 77 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 2012-01-27 14:26:30

回答

1

我不确定为什么你会得到nullpointerException,但是您要注册ReceiveronCreate()Service

此外,您没有发布完整的堆栈跟踪。如果你看得更远,应该有信息指出你的代码中的错误发生在之内。

1

很久以前,您可能已经解决了您的问题,但解决方案可能对Google流浪者很有用。

我在IntentService内有相同的NPE。我试图在这个服务的构造函数中注册接收器。当我将注册移至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 2014-05-09 18:28:00

相关问题