1

我正在实施基于 Dungeons 示例的计费服务(这是 Google 推荐的方式)。以下事实使情况稍微复杂:

  1. 主要服务类位于库项目中(因为我想多次重新设计代码)。由于此 stackoverflow 答案表明库项目中的服务可能会导致问题,因此我已将服务抽象化并在子项目中继承它;这也让我可以为每个 reskin 使用不同的公钥(这是可取的)。
  2. 有很多 UI 元素需要尽快了解是否支持计费。

因此,我正在调用一个函数来检查onCreate()第一个活动运行的方法是否支持计费(实际上是任何活动,但随后将编写一个首选项,因此这只应该发生一次)。

在 Dungeons 示例中,检查是否支持计费的代码尝试绑定到计费服务(来自Service类):

boolean bindResult = bindService(
    new Intent(Consts.MARKET_BILLING_SERVICE_ACTION),
    this,  // ServiceConnection.
    Context.BIND_AUTO_CREATE);

这个电话正在抛出一个NullPointerException. 我已经非常仔细地检查过,这些东西都不是空的;它发生函数中,显然在 ContextWrapper.java 的第 370 行。

由于这个其他的stackoverflow答案,我想知道是否检查账单onCreate()可能为时过早,但是Dungeons示例项目再次从这里调用它,所以我不认为是这样。

我使用的是更高版本的 Android (3.1),因此可能会产生影响,但我很想知道可能的原因。另一件事:Eclipse 告诉我customIntent它是空的,但它指的是什么并不完全清楚,我也找不到太多关于它的信息。

4

1 回答 1

2

答案非常非常简单:我错过了这一步Activity#onCreate

mBillingService = new BillingService()

//THIS STEP IS THE CRITICAL STEP
mBillingService.setContext(this);
//IF ONLY I HAD KNOWN

mBillingService.checkBillingSupported();

这叫attachBaseContext(context);

它现在可以工作了:)

于 2012-04-25T11:45:50.510 回答