私のスキャナクラスがアプリケーションを拡張し、BeaconConsumerを実装しています。 BeaconManagerをバインドまたはアンバインドしようとすると、NullPointerExceptionが発生します。メソッド内でBeaconManager.bindを実行するとエラーが発生するALTBeacon
public class Scanner extends Application implements BeaconConsumer{
private BeaconManager beaconManager;
@Override
public void onCreate() {
try {
super.onCreate();
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(" m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
}
catch (Exception e){
e.printStackTrace();
}
}
public void startScan(long period){
try {
if (beaconManager==null) {
beaconManager = BeaconManager.getInstanceForApplication(Scanner.this);
beaconManager.bind(Scanner.this);
beaconManager.setForegroundScanPeriod(period);
beaconManager.updateScanPeriods();
}
}
catch (Exception e){
e.printStackTrace();
}
}
public void stopScan(){
beaconManager.unbind(Scanner.this);
}
私は次のエラーを取得する:
W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'void org.altbeacon.beacon.BeaconManager.bind(org.altbeacon.beacon.BeaconConsumer)' on a null object reference
これをonCreate()メソッド自体の中で実行しようとするとうまくいきます。 – Timmy
いつ 'startScan'を呼びますか? beaconManagerが初期化される前にやっているかもしれませんか? – donfuxx
MainActivityのonCreate()メソッド内に新しいScannerオブジェクトを作成し、ボタンを使用してstartScanを実行します。 – Timmy