2015-08-28 38 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