2013-07-27 13 views
5

szukam godzin, aby dowiedzieć się, dlaczego oszczędzanie logiczną listę udostępnionych w preferencjach nie działa.Zapisz ArrayList w udostępnionych preferencji

Metody nie są zapisywanie lub ładowanie coś ... The loadmethod zawsze zwraca alternatywne wartości: tak list_size jako 0 i wartości logiczne jako fałszywe.

Przede wszystkim tworzę listę w moim główną działalność i wywołać metodę Save:

SaveLoadTraining sLoad = new SaveLoadTraining(); 
    ArrayList<Boolean> listBoolTrain = new ArrayList<Boolean>(); 
    listBoolTrain.add(true); 
    listBoolTrain.add(true); 
    sLoad.saveArray(listBoolTrain); 

Podklasa SaveLoadTraining wygląda następująco:

package de.sebspr.app08.halle; 

import java.util.ArrayList; 

import android.content.Context; 
import android.content.SharedPreferences; 
import de.sebspr.app08.MainActivity; 

public class SaveLoadTraining { 

    private Context context; 
    public static final String PREFS_NAME = "ListFile"; 
    private ArrayList<Boolean> list; 

    public SaveLoadTraining(){ 
     this.context = MainActivity.getMContext(); 
    } 

    public void saveArray(ArrayList<Boolean> list){ 

     this.list = list; 

     SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0); 
     SharedPreferences.Editor editor = settings.edit(); 

     int size = list.size(); 
     editor.putInt("list_size", size); 

     for (int i = 0; i < size; i++) { 
      editor.remove("list_"+i); 
     } 
     for (int i = 0; i < size; i++) { 
      editor.putBoolean("list_"+i, list.get(i)); 
     }  
     editor.commit(); 
    } 

    public ArrayList<Boolean> loadArray(){ 

     SharedPreferences file = context.getSharedPreferences(PREFS_NAME, 0); 
     list = new ArrayList<Boolean>(); 
     int size = file.getInt("list_size", 0); 

     for(int i = 0; i<size;i++){ 
      boolean bool = file.getBoolean("list_"+i, false); 
      list.add(bool); 
     } 
     return list; 
    } 
} 

nie mogę dowiedzieć się, co jest nie tak ...

Może obsługiwać kontekst w niewłaściwy sposób? po prostu wywołać tę metodę, aby uzyskać kontekst główną działalność:

... 
mContext = this; 
... 
    public static Context getMContext(){ 
     return mContext; 
    } 
+2

'Nie mogę dowiedzieć się, co jest nie tak ...' - Nie możemy, bo nie powiedział nam;) – Simon

+0

ehm, hehe;) Metody nie są zapisywanie lub ładowanie coś .. . na loadmethod zawsze zwraca alternatywne wartości: tak list_size jako 0 i wartości logiczne jako fałszywy – Bolic

+0

właśnie skopiowany kod i to działa na mnie. Pokaż, gdzie ładujesz i zapisujesz lub jak testujesz. –

Odpowiedz

3

Wystarczy wprowadzić następujące zmiany w kodzie, a to powinno działać. Jako zmienną klasy przyjmij SharedPrefrences mSharedPrefs.

public class SaveLoadTraining 
{ 
private Context context; 
public static final String PREFS_NAME = "ListFile"; 
private ArrayList<Boolean> list; 
private SharedPreferences mSharedPrefs; 

public SaveLoadTraining(){ 
    this.context = getApplicationContext(); 
    mSharedPrefs = context.getSharedPreferences(PREFS_NAME, 0); 
} 

Wykonaj 2 różne metody usuwania i dodawania wartości do współdzielonych preferencji i rób to w dwóch zatwierdzeniach zamiast 1 zatwierdzania.

1-te metoda usuwania listy

public void removeArray(ArrayList<Boolean> list) 
{ 
SharedPreferences.Editor editor = mSharedPrefs.edit(); 

int size = list.size(); 

    for (int i = 0; i < size; i++) { 
     editor.remove("list_"+i); 
    } 
    editor.commit(); 
} 

2. Sposób dodawania listy

public void addArray(ArrayList<Boolean> list) 
{ 
SharedPreferences.Editor editor = mSharedPrefs.edit(); 

    int size = list.size(); 
    editor.putInt("list_size", size); 

    for (int i = 0; i < size; i++) { 
     editor.putBoolean("list_"+i, list.get(i)); 
    }  
    editor.commit(); 
} 

Mam nadzieję, że to zadziała.

+0

zorientowali się błąd. To było gdzieś w moim kodzie. Więc kod działa dobrze. Neverless ... dzięki ;-) – Bolic

+0

@Bolic No Problem kolego :) –

+0

@SalmanAyub chcę zapisać/sklepu Lista we wspólnych preferencji w jaki sposób można to zrobić? Nie chcę zapisywać ciągów list Chcę przechowywać pełną listę tablicList w SharedPreferences – Erum

1
public static boolean saveArrayList() 
{ 

SharedPreferences sp = SharedPreferences.getDefaultSharedPreferences(this); 
SharedPreferences.Editor mEdit1 = sp.edit(); 
mEdit1.putInt("Status_size", sKey.size()); /* sKey is an array List*/ 

    for(int i=0;i<sKey.size();i++) 
    { 
    mEdit1.remove("Status_" + i); 
    mEdit1.putString("Status_" + i, sKey.get(i)); 
    } 

    return mEdit1.commit();  
} 

**Loading Array Data from Shared Preferences** 

public static void loadArrayList(Context mContext) 
{ 
    Shared Preferences mSharedPreference1 = PreferenceManager.getDefaultSharedPreferences(mContext); 
    sKey.clear(); //skey is arraylist 
    int size = mSharedPreference1.getInt("Status_size", 0); 

    for(int i=0;i<size;i++) 
    { 
     sKey.add(mSharedPreference1.getString("Status_" + i, null)); //skey is arraylist 
    } 
} 
Powiązane problemy