0

В моей деятельности у меня есть переменные экземпляра LocalBinder mBinder ;ServiceConnection mConnection; and булевы mBound; `активность связывания службы бросает NullPointerException

В onCreate я экземпляр ServiceConnection и установить его mConnection, как это:

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

И я установить mBinder к нулю в onServiceDisconnected(ComponentName className)

Проблема заключается в том, что вызов связать услугу с использованием:

никогда не возникает ... поэтому ServiceConnection никогда не вызывается ... и когда я использую открытый метод в классе LocalBinder, он выдает исключение, поскольку связующее имеет значение NULL.

У меня есть непустое ServiceConnection объект и я использую правильный context.The активность запускается на приложение start.The LocalBinder как вы могли догадаться статический внутренний класс 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);, но он не будет связываться ... Служба связи не будет отображаться, даже если bindService возвращает истину ... Таким образом, IBinder не передается в Activity, вызывающий NullPointerException

+0

Когда вы пытаетесь получить доступ к mBinder? – pskink

+0

В 'onResume', как' mBinder.getRandomNumber(); 'в цикле for, здесь возникает исключение в LogCat – vamsiampolu

+0

попробуйте вернуть значение log.d bindService() – pskink

ответ

0

Я не думаю, что вы должны создать ServiceConnection() - скорее, я думаю, что вы реализуете интерфейс ServiceConnection в своей деятельности, а затем передаете Activity в bindService:

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(). Надеюсь, это поможет.

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

  • Нет связанных вопросов^_^