Привязка к услуге из библиотеки - PullRequest
0 голосов
/ 27 марта 2012

У меня есть образец, который я привязываю к услуге, и этот работает. Когда я пытаюсь переместить код, который связывает службу, в библиотеку, вызов 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 голосов
/ 28 марта 2012

Используете ли вы эквивалентный контекст для привязки? Напомню, что поведение привязки зависит от того, вызываете ли вы bindService() для действия в сравнении с получателем или в контексте службы.

А также: какое исключение? Любое "вызвано"?

РЕДАКТИРОВАТЬ: NullPointerException обычно означает, что вы передали нуль, где ожидался допустимый объект. Кроме того, исключение имело место в ContextWrapper - большинство методов там только и делают, что передают вызов базовому объекту контекста. Что намекает на то, что базовый контекст не был правильно инициализирован.

Я вижу, что звонок происходит в классе LocificationToolKit. Является ли LocificationClientActivity подклассом LocificationToolKit? Если нет, то правильно ли вы вызываете конструктор 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);
        //...
    }
}
...