绑定到库中的服务

时间:2012-03-27 07:42:37

标签: android service bind

我有一个示例,我绑定到一个服务,这个工作。当我尝试将绑定到服务的代码移动到库时,对BindService的调用失败并出现异常。我可以看一下任何想法或示例代码吗?

这是绑定调用:

boolean rc = bindService(MyIntent, mConnectionC, Context.BIND_AUTO_CREATE);

这是例外日志:

04-02 17:28:36.896: W/System.err(1567): java.lang.NullPointerException
04-02 17:28:36.947: W/System.err(1567):     at android.content.ContextWrapper.bindService(ContextWrapper.java:337)
04-02 17:28:36.976: W/System.err(1567):     at com.Locification.LocificationToolKit.InitLocification(LocificationToolKit.java:280)
04-02 17:28:36.996: W/System.err(1567):     at com.LocificationClient.LocificationClientActivity.onCreate(LocificationClientActivity.java:49)
04-02 17:28:37.026: W/System.err(1567):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-02 17:28:37.046: W/System.err(1567):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
04-02 17:28:37.086: W/System.err(1567):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
04-02 17:28:37.106: W/System.err(1567):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
04-02 17:28:37.126: W/System.err(1567):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
04-02 17:28:37.156: W/System.err(1567):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-02 17:28:37.186: W/System.err(1567):     at android.os.Looper.loop(Looper.java:123)
04-02 17:28:37.207: W/System.err(1567):     at android.app.ActivityThread.main(ActivityThread.java:4363)
04-02 17:28:37.236: W/System.err(1567):     at java.lang.reflect.Method.invokeNative(Native Method)
04-02 17:28:37.256: W/System.err(1567):     at java.lang.reflect.Method.invoke(Method.java:521)
04-02 17:28:37.286: W/System.err(1567):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-02 17:28:37.356: W/System.err(1567):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-02 17:28:37.386: W/System.err(1567):     at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:0)

您是否使用等效的上下文绑定?我记得绑定行为取决于你是否为活动与接收者与服务上下文调用bindService()

还有:什么例外?任何“由...引起的?”

编辑:NullPointerException通常意味着您已经传递了一个null,其中需要一个有效的对象。此外,异常发生在ContextWrapper中 - 大多数方法只会将调用传递给底层上下文对象。其中暗示基本上下文未正确初始化。

我看到调用发生在班级LocificationToolKit内。 LocificationClientActivityLocificationToolKit的子类吗?如果没有,您是否正确使用LocificationToolKit参数调用Context的构造函数?看起来你正试图从ContextWrapper内部绑定到尚未使用非空基本上下文初始化的服务。

EDIT2:InitLocification()不能是静态方法 - 因为那样你就无法从中调用bindService()。因此,您在某处有一个LocificationToolKit实例,有点像这样初始化:

LocificationToolKit LoTo = new LocificationToolKit(/*...*/);

所以你需要的是LocificationToolKit中的一个构造函数,它接受一个Context对象并将它传递给基类:

LocificationToolKit(Context c)
{
    super(c);
}

当您在LocificationToolKit中的某处构建LocificationClientActivity时,您需要将活动的this指针作为上下文传递。像这样:

LocificationClientActivity
{
    void onCreate(Bundle b)
    {
        //...
        LocificationToolKit LoTo = new LocificationToolKit(this);
        //...
    }
}