2015-08-28 62 views
1

我正在使用一些內部調用ContextWrapper.getPackageName()的專用代碼(SDK)。當運行從服務調用代碼時,我得到一個NullPointerException。在上下文對象上。服務上下文爲空

作爲一些背景信息,服務作爲單獨的進程運行,但我可以直接訪問服務類。如果我通過主UI應用程序(Activity)的上下文,那麼一切正常。如果我嘗試使用Service實例,則會出現問題。

我有一種感覺,上下文可能還沒有完全初始化的時間被調用。我應該在什麼時候稱呼它?

爲什麼上下文爲空?

這是一些代碼 - 我試過從Service.onBind()ServiceConnection.onServiceConnected()函數中實例化SDK。

@Override 
public void onServiceConnected(ComponentName componentName, IBinder iBinder) { 

     try { 
      sdk = new SDK(SDKService.this); 

      sdk.setCallbacks(sdkWrapperCallbacks); 

      connectionCallbacks.onConnected(messengerInbound); 
     } 
     catch (final Exception e) { 

      e.printStackTrace(); 

      connectionCallbacks.onConnectionError(e.getMessage()); 
     } 
} 

@Override 
public void onServiceDisconnected(ComponentName componentName) { 

     connectionCallbacks.onDisconnected(); 
} 


@Override 
    public IBinder onBind(Intent intent) { 

     SDK = new SDK(SDKService.this); 

     SDK.setCallbacks(sdkWrapperCallbacks); 

     connectionCallbacks.onConnected(messengerInbound); 

     return messengerInbound.getBinder(); 
    } 

回答

0

如果你在使用getApplicationContext()服務您的上下文,而服務在單獨的進程正在運行,那麼它是由設計。您的服務無權訪問應用程序上下文,但它可以訪問本地服務上下文,該上下文可以通過使用this訪問。

+0

當我使用'this'時'ContextWrapper'中的'mBaseContext'爲'null',因此會引發NPE。爲什麼是這樣? – conor