2012-04-10 5 views
0

Im Beispiel Codierung von in App-Abrechnung verwendet esAndroid in App-Abrechnung - Nutzung von Aufzählungen

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]; 
    } 
} 

und

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

für mich ist es sehr merkwürdig zu sein scheint hier eine ENUM zu nutzen. Wenn das Enum eine andere Reihenfolge verwendet, schlägt alles fehl und ich dachte, ein Enum sollte sich nicht auf einen bestimmten Ordinalwert verlassen. Warum wird so vorgegangen und nicht nur überprüft, ob der Returncode Null ist?

Wo in der Dokumentation von Android angegeben ist, dass zum Beispiel ein Return-Code von 3 ist RESULT_SERVICE_UNAVAILABLE. Ich kann das nur aus dem Beispielcode erraten.

Danke, A.

Antwort

0

Die tatsächliche JSON responseCode ist ein int, so müssen Sie es eine Enumeration konvertieren es in Java zu verwenden. Sie verwenden eine Enum, um zu zeigen, dass es eine endliche Menge von Antwortcodes gibt. Natürlich könnte es eine Reihe von final static int 's gewesen sein, aber das ist weniger lesbar. Der Code, den Sie zitieren wie folgt geschrieben worden sein könnte, was wahrscheinlich besser, die Verwendung von Aufzählungen rechtfertigen würde:

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

Wie für die Dokumentation, ist es Standard-Java-Verhalten: Aufzählungen von 0 starten, wenn Sie eine nicht angeben expliziter Wert Vgl. http://docs.oracle.com/javase/6/docs/api/java/lang/Enum.html#ordinal%28%29

IAB Abrechnungsantwortcodes, etc. sind hier aufgeführt: http://developer.android.com/guide/market/billing/billing_reference.html