【问题标题】:Android inapp billing - BillingService has compile errors with onServiceConnected and onServiceDisconnectedAndroid inapp billing - BillingService 在 onServiceConnected 和 onServiceDisconnected 上出现编译错误
【发布时间】:2012-07-12 13:01:06
【问题描述】:

我正在使用 Dungeons 应用程序示例,并且我正在使用该示例中提供的 BillingService 类。

我使用的是 Java 6,@override 对我有效,但在 BillingService.java 中的这两个方法出现编译错误:

/**
 * This is called when we are connected to the MarketBillingService.
 * This runs in the main UI thread.
 */
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
    if (Consts.DEBUG) {
        Log.d(TAG, "Billing service connected");
    }
    mService = IMarketBillingService.Stub.asInterface(service);
    runPendingRequests();
}

/**
 * This is called when we are disconnected from the MarketBillingService.
 */
@Override
public void onServiceDisconnected(ComponentName name) {
    Log.w(TAG, "Billing service disconnected");
    mService = null;
}

有人能帮我理解为什么会这样吗?

谢谢!

【问题讨论】:

  • 您面临哪些错误?你能具体说明一下吗?
  • @Ran and Bhavesh 发生的编译时间错误是我在这里留下覆盖是这样的:此行的多个标记 - BillingService 类型的 onServiceConnected(ComponentName, IBinder) 方法必须覆盖超类方法跨度>
  • 您能检查一下您是在 Java 1.5 还是更低版本下编译吗?如果是这样,请更改为 1.6+...
  • 我遇到了同样的问题,从 1.5 更改为 Java 1.6 对我有用。
  • 看看这个问题的公认答案:@harrakiss 所说的stackoverflow.com/questions/1678122,改成 1.6 就行了。

标签: android android-billing


【解决方案1】:

应用内计费是一个入门挑战。诀窍是让它在一个独立的项目中开始,然后做你所有的特定功能。相信我,勇敢地一起做这一切,不值得花时间开始。我希望谷歌在整体应用计费方面有所改进,使其易于实施、理解和调试。不久前我在博客上写过它,并创建了一个 helloworld 项目供人们下载并开始工作。希望对你也有帮助。

Debug Android inapp billing using Eclipse

【讨论】:

  • 我同意,但我碰巧快到了,只是有一些错误需要解决。
  • 这个应用内计费的东西消耗了我很多精力。特别是因为每一个微小的变化都必须在不止一种组合中进行测试。您错过了一个步骤并重新安装了您的应用程序,您的客户可能会丢失所有购买的信息。这很疯狂。测试每个场景(无论多么简单)都需要 1/2 小时。这就是为什么我喜欢从一个简单的 HelloWorld 开始。
【解决方案2】:

确保您的类实现了ServiceConnection 接口。

【讨论】:

  • 是的,它已经实现了该接口。但是这些错误仍然存​​在。
  • “多个标记”可能意味着该行有多个错误,因此请检查它们是什么。
  • 这是两个错误: 这一行有多个标记 - BillingService 类型的 onServiceDisconnected(ComponentName) 方法必须覆盖超类方法 ....并且 - 实现 android.content.ServiceConnection.onServiceDisconnected跨度>
  • 您是否尝试在其上运行 Android lint?有时会有所帮助。
  • 其实我对 Android lint 并不熟悉。我查了一下..听起来很有用,但我还没有设置它。
【解决方案3】:

我认为您应该简单地从这两种方法中删除 @Override 装饰器。我正在使用 Google BillingService 类,这是我的方法:

public void onServiceConnected(ComponentName name, IBinder service)
{        
    mService = IMarketBillingService.Stub.asInterface(service);
    runPendingRequests();
}

您正在实现一个接口,而不是使用抽象方法扩展一个类。

【讨论】:

  • 谢谢,你能帮我多理解一下覆盖或注释掉它有什么区别吗?
  • 当然,在实现接口时,不要使用 override 关键字。但是,如果您正在扩展一个抽象类或具有一些抽象方法的类,则使用 override 关键字。覆盖方法行为是实现多态性的方法之一:你可以有几个类覆盖抽象基类中的方法,但是这些类中的每一个都可以做一些不同的事情,例如你可能有一个对整数进行排序的类和另一个对小数进行排序的类——它们都可以覆盖抽象基类中的 sort() 方法。
【解决方案4】:

安装您的应用签名...所以转到 android 工具导出签名应用...。现在它已签名,您可以取回查询。至少在物理设备上这是我的问题。

【讨论】:

    【解决方案5】:

    您可以尝试使用默认编译选项。

    右键单击(或按住 Control 单击)项目并选择“属性”

    选择“Java 编译器”

    取消选中“启用项目特定设置”

    Eclipse 会提示重新编译,应该没问题。

    【讨论】:

      【解决方案6】:

      右击项目 选择 --> Android 工具 选择 --> 修复项目属性

      这为我修复了它(我相信这是一个 Java 编译器设置抛出它)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多