0

在应用内计费的示例编码中,它使用

public enum ResponseCode {
    RESULT_OK,
    RESULT_USER_CANCELED,
    RESULT_SERVICE_UNAVAILABLE,
    RESULT_BILLING_UNAVAILABLE,
    RESULT_ITEM_UNAVAILABLE,
    RESULT_DEVELOPER_ERROR,
    RESULT_ERROR;

    // Converts from an ordinal value to the ResponseCode
    public static ResponseCode valueOf(int index) {
        ResponseCode[] values = ResponseCode.values();
        if (index < 0 || index >= values.length) {
            return RESULT_ERROR;
        }
        return values[index];
    }
}

 int responseCode = response.getInt(Consts.BILLING_RESPONSE_RESPONSE_CODE);
 boolean billingSupported = (responseCode == ResponseCode.RESULT_OK.ordinal());

对我来说,在这里使用枚举似乎很奇怪。如果枚举使用一些不同的顺序,它都会失败,我认为枚举不应该依赖于某个序数值。为什么要这样做而不只是检查返回码是否为零?

在 Android 的文档中指定的位置,例如返回码 3 是 RESULT_SERVICE_UNAVAILABLE。我只能从示例代码中猜到这一点。

谢谢。

4

1 回答 1

0

实际的 JSONresponseCode是一个 int,因此您需要将其转换为枚举才能在 Java 中使用它。他们使用枚举来表明存在一组有限的响应代码。当然,它可能是一堆final static int',但可读性较差。您引用的代码可能是这样编写的,这可能会更好地证明使用枚举的合理性:

 ResponseCode responseCode = ResponseCode.valueOf(response.getInt(Consts.BILLING_RESPONSE_RESPONSE_CODE));
 boolean billingSupported = (responseCode == ResponseCode.RESULT_OK);

至于文档,它是标准的 Java 行为:如果您不指定显式值,则枚举从 0 开始。参照。 http://docs.oracle.com/javase/6/docs/api/java/lang/Enum.html#ordinal%28%29

IAB 计费响应代码等在此处列出:http: //developer.android.com/guide/market/billing/billing_reference.html

于 2012-04-11T06:45:56.920 回答