0

나는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()); 
    } 
} 

내 서비스에서 다음 onCreate()입니다했다 이제 앱이 실행 중일 때 서비스가 작동합니다. 정확히. 하지만 내 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.

사용 전에 목적은 첫째, null이 오브젝트 참조하여 확인해야한다 :이 beaconFilterModelstatic

+0

모든 로그를 모델에 저장 했습니까? – Noorul

+0

내가 왜 this.stopSelf();를 사용하고 있는지 알 수 있습니까? – Noorul

+0

서비스는 BlueTooth에 따라 다르므로 BT가 켜져 있지 않으면 서비스를 중지하십시오. –

답변

3

변경 조건 검사의 순서이다.

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

    } 
+0

하지만 문제는 문자열이 비어 있지 않다는 것을 알고 있습니다. –

+0

@AyushGupta ** 비어 있지 않으면 ** 충돌이 발생하는 이유는 무엇입니까? – Gattsu

+0

그 질문입니다 –