2017-02-08 10 views
0

В классе обслуживания:Почему Null Pointer при попытке использовать локальную службу Android?

class AeroBluetoothService extends Service { ... 
private final IBinder asBleBinder = new LocalBinder(); 
public class LocalBinder extends Binder { 
    AeroBluetoothService getService() { 
     return AeroBluetoothService.this; 
    } 
} 

@Override 
public IBinder onBind(Intent intent) { 
    return asBleBinder; 
} 

В клиенте Активность:

Intent bindAsBleIntent; 

@Override 
public void onServiceConnected(ComponentName className, IBinder service) { 
    AeroBluetoothService.LocalBinder asBleBinder = (AeroBluetoothService.LocalBinder) service; 
    asBleServiceRef = asBleBinder.getService(); 
} 

В OnCreate Клиента():

bindAsBleIntent = new Intent(getApplicationContext(), AeroBluetoothService.class); 
bindService(bindAsBleIntent, /*ServiceConnection*/ this, Context.BIND_AUTO_CREATE); 

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

asBleServiceRef.scanForAero(); 

ссылка на экземпляр службы, asBleServiceRef, is null. Как будто обратный вызов onServiceConnected() не вызывается (или передает нулевой аргумент).

Я довольно тщательно скопировал этот код с примера Android. Я просто заметил, что пример вызывает bindService() из его метода onStart(), тогда как я звоню от onCreate(). Может ли это иметь какое-то значение? В чем проблема?

+1

post logcat output here –

+2

Опубликовать код класса Activity, объявили ли вы службу в манифесте? – avinash

+0

Бинго! Забыл все о манифесте. Я буду исследовать и добавлять. –

ответ

0

Как @avinash правильно увидел, проблема была просто пренебречь объявлением Службы в манифесте.