2017-02-12 5 views
0

Ich muss Benutzer-ID so lange speichern. Ich möchte erzwingen, Benutzer-ID in lange Art von Präferenz zu speichern. Welches Problem liegt vor, wenn der Server mir 22 als Benutzer-ID mit Integer-Typ zuweist. und ich überlasse es der Präferenz für das Speichern. Es speichert stattdessen unter putInt-Methode, weil die Länge der Ziffer kurz ist. und wenn ich es erhalte sagt es Ganzzahl kann nicht gegossen werden zu lange gegossen werden. Im Folgenden sind überladene Methoden in meiner Preference-Util-Klasse, die Benutzer-ID speichern.erzwinge eine Variable zu 'Long' Typ immer

Ich möchte Benutzer-ID so lange speichern und es als gleich abrufen. was es tut ist, es vorherzusagen, Benutzer-ID, wegen der Länge der Ziffern integer sein und speichern Sie es unter Put mEditor.putInt (valueKey, Wert); .. hoffe du verstehst die Frustration. Was ich an eine mögliche Lösung denken könnte, ist, dass sie an diese Methoden weitergegeben wird. Ich speichere nur die Benutzer-ID explizit mit putLong-Methode .. oder gibt es eine andere Lösung?

+1

Cast zu einem langen, oder verwenden Sie die wörtliche Schreibweise '22L' – CollinD

+0

@Usman Ghauri Verwenden Sie Folgendes: Long.valueOf (int) ;. –

+0

@CollinD und tushar: Danke, aber das könnte einen Fall lösen, kann aber in int Fällen Probleme verursachen. save and read sind verallgemeinerte Methoden, die ich für jede andere Int/long-Präferenz verwende. Das ist vielleicht nicht die beste Lösung –

Antwort

0

Sie können den int-Wert (ex: 22) vom Server abrufen und an die save() -Methode übergeben. Dort können Sie es in lang und in putLong-Methode speichern. Hier ist der Code:

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

Dies ist nicht die beste Lösung, da es jede andere Art von Präferenz auch lange dauern wird. –

1

Sie Aufzählungen anstelle von reinen String Objekten verwenden:

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

Verwendung:

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

Ich denke, das ist eine mögliche Lösung. Ich werde versuchen, mit dir zu überprüfen –

Verwandte Themen