我正在使用一些内部调用ContextWrapper.getPackageName()
的专有代码(SDK)。当从服务中调用代码时,我得到NullPointerException
。在上下文对象上。
作为一些背景信息,该服务作为单独的进程运行,但我可以直接访问服务类。如果我传入主UI应用程序(Activity)的上下文,那么一切正常。如果我尝试使用服务实例,就会出现问题。
我感觉上下文在被调用时可能尚未完全初始化。我应该在什么时候称之为?
为什么上下文为空?
以下是一些代码 - 我尝试在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 :(得分:0)
如果您在使用getApplicationContext()
时使用this
服务上下文,而该服务是在单独的流程中运行,那么它是设计使然。您的服务无法访问应用程序上下文,但可以访问本地服务上下文,可以使用{{1}}进行访问。