Я разрабатываю приложение для Android с использованием библиотеки маяков, часть этого приложения собирается искать конкретный маяк через его младший идентификатор (который вводится пользователем через диалог).Android Beacon Library, Null Object Reference при вызове startRangingBeaconsInRegion
Если я пишу все в одной и той же деятельности, все работает нормально, но я бы хотел, чтобы диалоги были отделены во внешнем чистом классе java, поэтому в действии, реализующем BeaconConsumer, я добавил «метод», создающий и привязывающий маяковый менеджер.
public class Activity03 extends AppCompatActivity
implements BeaconConsumer, RangeNotifier {
...
public void scanForBeacon(Context context, String selectedMinorId){
beaconManager = BeaconManager.getInstanceForApplication(context);
beaconManager.getBeaconParsers().add(new BeaconParser()
.setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
Identifier minorIdFilter = Identifier.parse(selectedMinorId);
myRegion = new Region(
"my_region",
null,
null,
minorIdFilter);
beaconManager.bind((BeaconConsumer) context);
}
...
}
Дело в том, что при вызове startRangingBeaconsInRegion, я получил:
попытка вызвать виртуальный метод «недействительным org.altbeacon.beacon.BeaconManager.startRangingBeaconsInRegion (org.altbeacon.beacon.Region)»на нулевой ссылки на объект
последовательность: 1.
пользователю предлагается (через GoogleApiClient), чтобы включить BLE и локализация
2. внутри onActivityResult диалоговое окно для вставки второстепенную ID определен из класса Java DialogUtilities
DialogUtilities.showSelectionDialog(Activity03.this);
3. нажав кнопку диалога освобождаются, экземпляр BeaconConsumer деятельности создаются и метод называется:
Activity03 a03 = new Activity03(); a03.scanForBeacon(context, minorId);
4. когда onBeaconServiceConnect() называется я получил нулевой объект на линии startRangingBeaconsInRegion
@Override
public void onBeaconServiceConnect() {
try {
beaconManager.startRangingBeaconsInRegion(myRegion);
} catch (RemoteException e) {
e.printStackTrace();
}
}
Я новичок в Java и Android, но это не кажется мне, что проблема заключается в регионе, потому что я такой же ответ, даже если я устанавливаю обнулить все идентификаторы, так что я не могу понять, почему нулевой Справка.
Возможно ли, что я создаю два разных BeaconMangers из-за активности, которую я возвращаю Dialog? Если да, то как я могу это решить?
Если нет, как избежать этой ссылки на нулевой объект?
Заранее спасибо
EDIT
BeaconManager декларация
public class Activity03 extends AppCompatActivity implements BeaconConsumer, RangeNotifier {
static final int REQUEST_CHECK_SETTINGS = 1000;
private BeaconManager beaconManager;
private Region myRegion;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.AppTheme);
setContentView(R.layout.activity_03);
}
@Override
protected void onResume() {
@Override
super.onResume();
PermissionsUtilities.switchLocationAndBluetooth(Activity03.this);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
final LocationSettingsStates states = LocationSettingsStates.fromIntent(data);
switch (requestCode) {
case REQUEST_CHECK_SETTINGS:
switch (resultCode) {
case Activity.RESULT_OK:
DialogUtilities.showSensorSelectionDialog(Activity03.this);
break;
case Activity.RESULT_CANCELED:
...
break;
default:
break;
}
break;
}
}
спасибо за предложение, я быстро переставить свой код в соответствии с вашим предложением и получил исключение нулевого указателя на 'setrangeNotifier'; кроме того, я также понял, что использование setRangeNotifier таким образом устарело. – r08y