我正在实施基于Dungeons示例的结算服务(这是Google建议你去做的方式)。以下事实略显复杂:
因此,我调用一个函数来检查第一个活动运行的onCreate()
方法是否支持计费(实际上是任何活动,但是会写入首选项,因此这应该只发生一次)。
在Dungeons示例中,检查是否支持结算的代码会尝试绑定到结算服务(来自Service
类):
boolean bindResult = bindService(
new Intent(Consts.MARKET_BILLING_SERVICE_ACTION),
this, // ServiceConnection.
Context.BIND_AUTO_CREATE);
此次通话正在抛出NullPointerException
。我仔细检查过,这些东西都没有;它在函数中发生,显然是在ContextWrapper.java的第370行。
由于this other stackoverflow answer我想知道从onCreate()
检查结算是否为时尚早,但是Dungeons示例项目再次从此处调用它,所以我认为不是这样。
我正在使用更新版本的Android(3.1),因此可能会有效果,但我很想知道可能的原因。另一件事:Eclipse告诉我customIntent
是空的,但它并不完全清楚它所指的是什么,而且我也找不到它。
答案 0 :(得分:2)
答案非常非常简单:我错过了Activity#onCreate
中的这一步:
mBillingService = new BillingService()
//THIS STEP IS THE CRITICAL STEP
mBillingService.setContext(this);
//IF ONLY I HAD KNOWN
mBillingService.checkBillingSupported();
这会调用attachBaseContext(context);
现在有效:)