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であると指定されている場合。これはサンプルコードからしか推測できません。

ありがとう、A。

4

1 に答える 1

0

実際のJSONresponseCodeはintであるため、Javaで使用するには、JSONを列挙型に変換する必要があります。列挙型を使用して、応答コードの有限セットがあることを示します。もちろん、それはたくさんのfinal static int'sであった可能性がありますが、それは読みにくいです。引用しているコードは次のように記述されている可能性があります。これにより、列挙型の使用が正当化される可能性があります。

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

ドキュメントに関しては、これは標準のJavaの動作です。明示的な値を指定しない場合、列挙型は0から始まります。Cf. 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 に答える