0

我在我的服务提出了以下onCreate()NullPointerException - 如果应用程序被杀害

@Override 
    public void onCreate() { 
     broadcaster = LocalBroadcastManager.getInstance(this); 
     map = new HashMap<>(); 
     beaconFilterModel = new BeaconFilterModel(); 
     stateList = new ArrayList<>(); 
     lastUpdateMap = new HashMap<>(); 
     waitingForExit = new HashMap<>(); 
     firstFind = false; 
     proximityBeaconList = new ArrayList<>(); 
     previousProximityMap = new HashMap<>(); 
     mHandler = new Handler(); 
     KontaktSDK.initialize("MdahnpkIOBvCxfOOmCKHtCdTaEXaqcSx"); 
     proximityManager = new ProximityManager(this); 
     proximityManager.setIBeaconListener(createIBeaconListener()); 
     proximityManager.filters().iBeaconFilter(new IBeaconFilter() { 
      @Override 
      public boolean apply(IBeaconDevice iBeaconDevice) { 

       return compareMajor(beaconFilter, iBeaconDevice) 
         && compareUUID(beaconFilter, iBeaconDevice) 
         && compareMinor(beaconFilter, iBeaconDevice); 
      } 
     }); 
     proximityManager.connect(new OnServiceReadyListener() { 
      @Override 
      public void onServiceReady() { 

       proximityManager.configuration().scanPeriod(ScanPeriod.RANGING); 
       proximityManager.startScanning(); 
      } 
     }); 
    } 

及以下onStartCommand()

@Override 
public int onStartCommand(Intent intent,int flags, int startId) { 
    if (BluetoothAdapter.getDefaultAdapter() == null ||!BluetoothAdapter.getDefaultAdapter().isEnabled()) { 
     this.stopSelf(); 
    } 
    // If we get killed, after returning from here, restart 
    return START_STICKY; 
} 

这里是我的compareUUID

public boolean compareUUID(BeaconFilterModel beaconFilterModel, IBeaconDevice iBeaconDevice) { 
    if(beaconFilterModel.getUuid().isEmpty() || beaconFilterModel.getUuid() == null) { 
     return true; 
    } else { 
     return UUID.fromString(beaconFilterModel.getUuid()).equals(iBeaconDevice.getProximityUUID()); 
    } 
} 

现在,当我的应用程序正在运行时,该服务正常运行正常。但是如果我杀了我的Ap然后重新启动它,我的应用程序崩溃了堆栈跟踪:

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.isEmpty()' on a null object reference 
     at com.nicbit.proximitydemo.services.ProximityScanService.compareUUID(ProximityScanService.java:68) 
     at com.nicbit.proximitydemo.services.ProximityScanService$1.apply(ProximityScanService.java:110) 
     at com.nicbit.proximitydemo.services.ProximityScanService$1.apply(ProximityScanService.java:105) 
     at com.kontakt.sdk.android.ble.discovery.ibeacon.IBeaconParser.filter(IBeaconParser.java:100) 
     at com.kontakt.sdk.android.ble.discovery.ibeacon.IBeaconDiscoverer.performDiscovery(IBeaconDiscoverer.java:59) 
     at com.kontakt.sdk.android.ble.service.DefaultBluetoothDeviceDiscoverer.performDiscovery(DefaultBluetoothDeviceDiscoverer.java:35) 
     at com.kontakt.sdk.android.ble.service.MonitorCallback$1.run(MonitorCallback.java:53) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:152) 
     at android.app.ActivityThread.main(ActivityThread.java:5507) 
     at java.lang.reflect.Method.invoke(Method.java) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

P.S. beaconFilterModelstatic

+0

你有把任何日志到你的模型? – Noorul

+0

我可以知道你为什么使用this.stopSelf();? – Noorul

+0

服务依赖于蓝牙,所以如果BT不在,则停止服务。 –

回答

3

变化条件检查的顺序:

在使用前该对象第一,它具有与空对象引用来检查。

if(beaconFilterModel.getUuid() == null||beaconFilterModel.getUuid().isEmpty()){ 

    } 
+0

但事情是,我知道字符串不是空的。 –

+0

@AyushGupta如果它不是空**,那么为什么你会崩溃? – Gattsu

+0

这就是问题所在 –

相关问题