2017-02-12 1 views
0

Je dois enregistrer l'ID utilisateur aussi longtemps. Je veux forcer enregistrer l'ID utilisateur dans le type de préférence long. quel est le problème si le serveur m'assigne 22 comme identifiant d'utilisateur qui est de type entier. et je le passe à la préférence pour l'épargne. il sauve sous la méthode putInt à la place parce que la longueur du chiffre est courte. et si je le récupère, il dit que l'entier ne peut pas être lancé longtemps. ci-dessous sont des méthodes surchargées dans ma classe prefrence util qui sauvegardent l'identifiant de l'utilisateur.force une variable à être de type 'long' toujours

public int read(String valueKey, int valueDefault) { 
    return mPreferences.getInt(valueKey, valueDefault); 
} 

public void save(String valueKey, int value) { 
    mEditor.putInt(valueKey, value); 
    mEditor.commit(); 
} 

public long read(String valueKey, long valueDefault) { 
    return mPreferences.getLong(valueKey, valueDefault); 
} 

public void save(String valueKey, long value) { 
    mEditor.putLong(valueKey, value); 
    mEditor.commit(); 
} 

Je souhaite enregistrer l'ID utilisateur aussi longtemps et le récupérer comme tel. ce qu'il fait est, il prédit que l'identifiant de l'utilisateur sera entier en raison de la longueur des chiffres peut-être et enregistrez-le sous mEditor.putInt (valueKey, value); .. J'espère que vous comprenez la frustration. ce que je pourrais penser de la solution possible est qu'au lieu de passer la valeur à ces méthodes. Je viens de sauvegarder explicitement l'identifiant de l'utilisateur avec la méthode putLong .. ou existe-t-il une autre solution?

+1

Moulage à une longue, ou utiliser la notation littérale '22L' – CollinD

+0

@Usman Ghauri Utilisez ce qui suit: Long.valueOf (int) ;. –

+0

@CollinD et tushar: merci, mais cela pourrait résoudre un cas, mais peut causer des problèmes dans les cas int. enregistrer et lire sont la méthode généralisée que j'utilise pour chaque autre int/longue préférence. donc ce n'est peut-être pas la meilleure solution –

Répondre

0

Vous pouvez obtenir la valeur int (ex: 22) du serveur et la passer à la méthode save(). Là vous pouvez taper cast long et stocker dans la méthode putLong. Voici le code:

public void save(String valueKey, int value) { 
    Long longVal = (long)value; 
    mEditor.putLong(valueKey, longVal); 
    mEditor.commit(); 
} 
+1

ce n'est pas la meilleure solution car elle va lancer tous les autres types int de préférence aussi longtemps. –

1

Vous pouvez utiliser énumérations au lieu des objets purs String:

enum MyProperties{ 
    USER_ID{ 
    void save(long value, WhatEverTypeThisIs mEditor){ 
     mEditor.putLong(valueKey, longVal); 
     mEditor.commit(); 
    } 
    long get(WhatEverOtherTypeThisIs mPreferences){ 
     return mPreferences.getLong(name(), valueDefault); 
    } 
    }, 
    INT_PROPERTY{ 
    void save(long value, WhatEverTypeThisIs mEditor){ 
     mEditor.putInt(valueKey,(int) longVal); 
     mEditor.commit(); 
    } 
    //needs cast to int at caller side 
    long get(WhatEverOtherTypeThisIs mPreferences){ 
     return mPreferences.getInt(name(), valueDefault); 
    } 
}; 
abstract void save(long value, WhatEverTypeThisIs mEditor); 
abstract long get(WhatEverOtherTypeThisIs mPreferences); 
} 

Utilisation:

MyProperties.USER_ID.save(22,mEditor); 
    long id22 = MyProperties.USER_ID.get(mPreferences); 
    MyProperties.INT_PROPERTY.save(23,mEditor); 
    int somValue23 = (int)MyProperties.INT_PROPERTY.get(mPreferences); 
+0

Je pense que c'est une solution possible. Je vais essayer de vérifier avec vous –