2015-01-23 32 views
20

Uygulama ilk defa açıldığında webservice'den aldığım ürünlerin webservice'den ürün listesini aldım. Bu listeyi paylaşılan tercihlere kaydetmek istiyorum.List <Object>, SharedPreferences'a nasıl kaydedilir?

List<Product> medicineList = new ArrayList<Product>(); 

Ürün sınıftır burada:

public class Product { 
    public final String productName; 
    public final String price; 
    public final String content; 
    public final String imageUrl; 

    public Product(String productName, String price, String content, String imageUrl) { 
     this.productName = productName; 
     this.price = price; 
     this.content = content; 
     this.imageUrl = imageUrl; 
    } 
} 

i webcoder her zaman talep etmiyoruz Listesini nasıl tasarruf edebileceğinizi?

+1

sadece SharedPrefrences ilkel değerleri kaydedebilirsiniz olsun için

Editor prefsEditor = mPrefs.edit(); Gson gson = new Gson(); String json = gson.toJson(myObject); prefsEditor.putString("MyObject", json); prefsEditor.commit(); 

kaydetmek için. –

cevap

18

Yalnızca ilkel türleri kullanmak mümkündür, çünkü tercih bellekte saklanır.

private static SharedPreferences sharedPreferences = context.getSharedPreferences(STORE_FILE_NAME, Context.MODE_PRIVATE); 

private static SharedPreferences.Editor editor = sharedPreferences.edit(); 

public <T> void setList(String key, List<T> list) { 
    Gson gson = new Gson(); 
    String json = gson.toJson(list); 

    set(key, json); 
} 

public static void set(String key, String value) { 
    editor.putString(key, value); 
    editor.commit(); 
} 
+0

hey, bunun gerçekten geç olduğunu biliyorum ama neden statik değişkenler ve yöntemler kullanıyorsunuz? –

+4

trick nasıl geri alınır? –

+0

@albertkim Bunun böyle olduğuna inanıyorum çünkü ihtiyaç duyduğu her defasında yeni SharedPreferences örnekleri gerektirmiyor. Daha sonra kullanmak için bir yere sıkışmış bir değişken tuttu. –

2

Şu anda iki seçenek
a) Kullanım SharedPreferences
b) Kullanım SQLite'ı varsa ve bu değerleri kaydedin.

Nasıl Set olarak
a) SharedPreferences
İlk mağaza senin Listesini gerçekleştirmek için ve SharedPreferences doğru okunduğunda daha sonra Listesine geri dönüştürün.

Listtasks = new ArrayList<String>(); 
Set<String> tasksSet = new HashSet<String>(Listtasks); 
PreferenceManager.getDefaultSharedPreferences(context) 
    .edit() 
    .putStringSet("tasks_set", tasksSet) 
    .commit(); 

Sonra, okuduktan sonra:

Set<String> tasksSet = PreferenceManager.getDefaultSharedPreferences(context) 
    .getStringSet("tasks_set", new HashSet<String>()); 
List<String> tasksList = new ArrayList<String>(tasksSet); 

b) SQLite İyi öğretici: SharedPreferences olarak http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/

1

sadece temelögeye saklayabilir.

Muhtemel bir yaklaşım olarak, GSON'u kullanabilir ve değerleri JSON'da saklayabilirsiniz.

Gson gson = new Gson(); 
String json = gson.toJson(medicineList); 

yourPrefereces.putString("listOfProducts", json); 
yourPrefereces.commit(); 
0
Sen olarak aşağıda Gson kullanarak yapabilir

:

  • İndir List<Product> webcoder
  • dönüştürme Ama ne kullanabilirsiniz json içine GSON ile türler seri ve tercihlerine içine dize koymak olduğunu Listnew Gson().toJson(medicineList, new TypeToken<List<Product>>(){}.getType())
  • kaydetiçine dönüştürülen dizesini kullanarak JsonStringiçineEğer List yeniden inşa etmek amacıyla normalde

gibi, sen Gson mevcut fromJson yöntemi kullanarak sürecini dönmeniz gerekir.

13

Nesne -> JSON (.toJSON) ve JSON -> Nesnesini (.fromJSON) dönüştürmek için GSON kullanabilirsiniz.Eğer (örneğin) istiyorum ile

  • senin Etiketler tanımlayın:

    private static final String PREFS_TAG = "SharedPrefs"; 
    private static final String PRODUCT_TAG = "MyProduct"; 
    
  • bu etiketin

  • private List<Product> getDataFromSharedPreferences(){ 
        Gson gson = new Gson(); 
        List<Product> productFromShared = new ArrayList<>(); 
        SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(PREFS_TAG, Context.MODE_PRIVATE); 
        String jsonPreferences = sharedPref.getString(PRODUCT_TAG, "");  
    
        Type type = new TypeToken<List<Product>>() {}.getType(); 
        productFromShared = gson.fromJson(jsonPreferences, type); 
    
        return preferences; 
    } 
    
  • ayarlayın sharedPreferences için sharedPreference alın

    private void setDataFromSharedPreferences(Product curProduct){ 
        Gson gson = new Gson(); 
        String jsonCurProduct = gson.toJson(curProduct); 
    
        SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(PREFS_TAG, Context.MODE_PRIVATE); 
        SharedPreferences.Editor editor = sharedPref.edit(); 
    
        editor.putString(PRODUCT_TAG, jsonCurProduct); 
        editor.commit(); 
    } 
    
  • Bir dizi Ürünü kaydetmek isterseniz. Bunu yapmak: JSON ile ilgili

    private void addInJSONArray(Product productToAdd){ 
    
        Gson gson = new Gson(); 
        SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(PREFS_TAG, Context.MODE_PRIVATE); 
    
        String jsonSaved = sharedPref.getString(PRODUCT_TAG, ""); 
        String jsonNewproductToAdd = gson.toJson(productToAdd); 
    
        JSONArray jsonArrayProduct= new JSONArray(); 
    
        try { 
         if(jsonSaved.length()!=0){ 
          jsonArrayProduct = new JSONArray(jsonSaved); 
         } 
         jsonArrayProduct.put(new JSONObject(jsonNewproductToAdd)); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
    
        //SAVE NEW ARRAY 
        SharedPreferences.Editor editor = sharedPref.edit(); 
        editor.putString(PRODUCT_TAG, jsonArrayProduct); 
        editor.commit(); 
    } 
    
+1

Ürün dizisini JSONArray'dan almak için kod nedir? –

+1

Json'u bu satırda yapmayı denediğiniz gibi doğrudan SharedPreference'a koyamazsınız: 'editor.putString (PRODUCT_TAG, jsonArrayProduct); Önce dize (muhtemelen kodunuzdaki Gson nesnesiyle) dönüştürmeniz gerekir. . Örneğin: 'gson.toJson (jsonArrayProduct)' –

+0

Bekleniyor BEGIN_ARRAY, ancak zaten yanıtlanan ve kabul edilen –

2

Tüm cevabı Ok ama Java sen java.io.Serializable arabirimini uygulamak eğer herhangi bir nesne seri sağlar unutmayın. Bu şekilde, seri hale getirilmiş bir nesne olarak da tercihlere kaydedebilirsiniz. Burada Tercihler olarak saklamak için bir örnek: https://gist.github.com/walterpalladino/4f5509cbc8fc3ecf1497f05e37675111 Umarım bu bir seçenek olarak size yardımcı olabilir.

2
SharedPreferences mPrefs = getPreferences(MODE_PRIVATE); 

Gson gson = new Gson(); 
String json = mPrefs.getString("MyObject", ""); 
MyObject obj = gson.fromJson(json, MyObject.class); 
+0

sorusunu aldığınızda satır 1 sütun 2 yolunda BEGIN_OBJECT oldu, neden yinelenen yanıt ekliyorsunuz? – kakajan