绑定服务的活动会抛出NullPointerException

时间:2013-12-12 05:08:45

标签: android nullpointerexception android-service android-service-binding

在我的Activity中,我有实例变量LocalBinder mBinder ;ServiceConnection mConnection; and boolean mBound;`

onCreate我实例化ServiceConnection并将其设置为mConnection,如下所示:

mConnection=new ServiceConnection()
{
   public void onServiceConnected(ComponentName class name,IBinder service){
     Log.d(TAG,"Service connected");
     mBinder=(LocalService.LocalBinder)service;
 }

我在onServiceDisconnected(ComponentName className)

中将mBinder设置为null

问题似乎是使用:

绑定服务的调用
Intent intent=new Intent(MainActivity.this,LocalService.class);
   bindService(intent,mConnection,Context.BIND_AUTO_CREATE);

永远不会发生...因此永远不会调用ServiceConnection ...当我在LocalBinder类中使用公共方法时,它会抛出异常,因为binder为null。

我有一个非null ServiceConnection对象并使用了正确的上下文。活动是在app start上启动的。LocalBinder就像你可能已经猜到的一个静态内部类{{1 }}

本地服务如下所示:

LocalService

当我实现 static class LocalBinder { public int getRandomNumber() { return (int)(Math.random()*100); } } public IBinder onBind(Intent intent) { LocalBinder binder=new LocalBinder(); return binder; } onStartCommand时服务启动但它不会绑定...即使startService(intent);返回true,也不会显示Service Connected ...因此IBinder是没有传递给导致NullPointerException的Activity

1 个答案:

答案 0 :(得分:0)

我认为您不应该创建ServiceConnection() - 相反,我认为您在Activity中实现了ServiceConnection接口,然后在bindService中传递Activity:

public class MyClientActivity extends Activity implements ServiceConnection {

    @Override
    public void onStart() {
        bindService(new Intent(MainActivity.this,LocalService.class), this, BIND_AUTO_CREATE);
    }

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        Log.d(TAG,"Service connected");
        mBinder=(LocalService.LocalBinder)service;
    }

您还需要实现onServiceDisconnected()。希望有所帮助。