2016-08-02 14 views
1
public static void GetAllPoints(final IGetAllPointsCallBack callBack) {  
    SharedPreferences entity = getSharedPreferences("settings",MODE_PRIVATE); 
    String savedValue = entity.getString("entityGUID",null); 
} 

getSharedPreferences ist hier nicht funktioniert, ist es eine Möglichkeit, es in meiner Methode zu nennen, während ich seinen Wert in einer anderen Klasse zu speichern?Android getSharedPreferences nicht innerhalb einer Methode arbeitet

Ich spare meine Vorlieben wie folgt aus:

EntityType selectedItem = ApplicationController.entities.get(which); 
SharedPreferences.Editor savedValue = getSharedPreferences("settings",MODE_PRIVATE).edit(); 
savedValue.putString("entityGUID", String.valueOf(selectedItem.EntityGUID)); 
savedValue.apply(); 

ich brauchte, um meine Methode statisch zu machen, weil ich es von einer anderen Klasse bin erreichbar:

public void showAllSpots() 
    { 
    DataService.GetAllPoints(newDataService.IGetAllChargingPointsCallBack() { 
    @Override 
    public void Success(ArrayList<ChargingSpot> chargingSpots) { 
     // 
    } 

    }); 
    } 
+0

Wie speichern Sie die Pref? – Shaishav

+0

was ist fehler/ausgang bekommst du ?? Sind Sie sicher, dass Sie Daten innerhalb von sharedpreference gespeichert haben? – SaravInfern

+1

Mögliches Duplikat von ["Die nicht statische Methode kann nicht aus einem statischen Kontext referenziert werden"] (http://stackoverflow.com/questions/4922145/non-static-method-cannot-) be-referenced-from-a-static-context-error) –

Antwort

0

sich nach den offiziellen Dokumente für ContextgetSharedPreferences(...) ist NICHT static. Daher können Sie nicht innerhalb einer static-Methode darauf zugreifen.

Versuchen Sie, Ihre Methode, wie unten definiert, und es sollte funktionieren:

public void GetAllPoints(final IGetAllPointsCallBack callBack) {  
    SharedPreferences entity = getSharedPreferences("settings",MODE_PRIVATE); 
    String savedValue = entity.getString("entityGUID",null); 
} 

EDIT: Bei Ihrer Kommentar Antwort Prüfung, bemerkte ich Ihre Anforderung GetAllPoints(...) statisch zu halten. Eine Abhilfe wäre die anruf Context vorbei und rufen getSharedPreferences(...) davon:

public void GetAllPoints(final Context context, final IGetAllPointsCallBack callBack) {  
    SharedPreferences entity = context.getSharedPreferences("settings",MODE_PRIVATE); 
    String savedValue = entity.getString("entityGUID",null); 
} 
+0

aber wenn ich statische entfernen, kann die Methode nicht von der zugegriffen werden andere Klassen richtig? –

+0

Nun, es wird nicht _directly_ ohne eine Instanz dieser Klasse zugänglich sein, sicher. Ich habe meine Antwort bearbeitet. – ridsatrio

+0

Danke, es funktionierte, eine letzte Frage, die ich meine obige Frage bearbeitet, ist, wie man die Änderung auf der Methode widerspreche, die ich nenne? –

0

Sie benötigen eine Methode, um entweder zu ändern, so dass es nicht static ist oder brauchen Sie Context als eines der Argumente für diese Methode zu liefern und dann Ihre Methode wird wie folgt aussehen:

public static void GetAllPoints(final Context context, final IGetAllPointsCallBack callBack) {  
    SharedPreferences entity = context.getSharedPreferences("settings",Context.MODE_PRIVATE); 
    String savedValue = entity.getString("entityGUID",null); 
} 

Ich hoffe, das hilft.

+0

Wie unterscheidet sich das von meiner Lösung? – ridsatrio

Verwandte Themen