2011-09-09 13 views
12

Estoy trabajando en android. Quiero hacer una preferencia compartida en mi código, pero no sé la forma en que puedo hacer una preferencia compartida para la matriz y cómo puedo usar el valor de esa preferencia compartida en otra clase.¿Cómo se puede escribir el código para hacer preferencias compartidas para una matriz en Android?

Esta es mi matriz en un ciclo for: - urls [i] = sitesList.getWebsite(). Get (i);

quiero hacer una preferencia compartida de esta matriz urls []. por favor sugiérame cómo puedo escribir código para declarar preferencia compartida y cómo puedo recuperar el valor de esa preferencia compartida?

Gracias de antemano.

Respuesta

50

putStringSet y getStringSet sólo están disponibles en la API 11.

Como alternativa puede serializar las matrices usando JSON así:

public static void setStringArrayPref(Context context, String key, ArrayList<String> values) { 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
    SharedPreferences.Editor editor = prefs.edit(); 
    JSONArray a = new JSONArray(); 
    for (int i = 0; i < values.size(); i++) { 
     a.put(values.get(i)); 
    } 
    if (!values.isEmpty()) { 
     editor.putString(key, a.toString()); 
    } else { 
     editor.putString(key, null); 
    } 
    editor.commit(); 
} 

public static ArrayList<String> getStringArrayPref(Context context, String key) { 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
    String json = prefs.getString(key, null); 
    ArrayList<String> urls = new ArrayList<String>(); 
    if (json != null) { 
     try { 
      JSONArray a = new JSONArray(json); 
      for (int i = 0; i < a.length(); i++) { 
       String url = a.optString(i); 
       urls.add(url); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
    return urls; 
} 

Set y retreive sus URL de este modo:

// store preference 
ArrayList<String> list = new ArrayList<String>(Arrays.asList(urls)); 
setStringArrayPref(this, "urls", list); 

// retrieve preference 
list = getStringArrayPref(this, "urls"); 
urls = (String[]) list.toArray(); 
+0

Está funcionando para mí ... En realidad, quiero exactamente este tipo de solución. Thankx @Jeff Gilfelf –

Cuestiones relacionadas