2011-12-31 40 views
5

Normal bir kullanıcı tanımlı nesne dizisinden bir JSON Array oluşturdum. JSONArray'ı normal bir kullanıcı tanımlı tür dizisine dönüştürüyorum ..? Ben android.Using paylaşılan tercihi için ben net üzerinde bulunan bu kodu Json kullanıyorum:JSONArray öğesini Normal Diziye Dönüştürme

import org.json.JSONObject; 
import org.json.JSONArray; 
import org.json.JSONException; 

import android.content.Context; 
import android.content.SharedPreferences; 

public class JSONSharedPreferences { 
    private static final String PREFIX = "json"; 

    public static void saveJSONObject(Context c, String prefName, String key, JSONObject object) { 
     SharedPreferences settings = c.getSharedPreferences(prefName, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putString(JSONSharedPreferences.PREFIX+key, object.toString()); 
     editor.commit(); 
    } 

    public static void saveJSONArray(Context c, String prefName, String key, JSONArray array) { 
     SharedPreferences settings = c.getSharedPreferences(prefName, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putString(JSONSharedPreferences.PREFIX+key, array.toString()); 
     editor.commit(); 
    } 

    public static JSONObject loadJSONObject(Context c, String prefName, String key) throws JSONException { 
     SharedPreferences settings = c.getSharedPreferences(prefName, 0); 
     return new JSONObject(settings.getString(JSONSharedPreferences.PREFIX+key, "{}")); 
    } 

    public static JSONArray loadJSONArray(Context c, String prefName, String key) throws JSONException { 
     SharedPreferences settings = c.getSharedPreferences(prefName, 0); 
     return new JSONArray(settings.getString(JSONSharedPreferences.PREFIX+key, "[]")); 
    } 

    public static void remove(Context c, String prefName, String key) { 
     SharedPreferences settings = c.getSharedPreferences(prefName, 0); 
     if (settings.contains(JSONSharedPreferences.PREFIX+key)) { 
      SharedPreferences.Editor editor = settings.edit(); 
      editor.remove(JSONSharedPreferences.PREFIX+key); 
      editor.commit(); 
     } 
    } 
} 

Ben jsonarray içine kullanıcı tanımlı nesne dizisi dönüştürmeye çalışırken ve jsonshared tercih saklayarak ve daha sonra çalışıyorum onu geri almak için. Teşekkürler.

+1

hangi JSon kitaplığını kullanıyorsunuz? Bu ayrıntılar, sorunuzu hızlı bir şekilde cevaplamak için yardımcı olacaktır. – kosa

+0

Ayrıntılar ile düzenlenmiştir. – shady2020

cevap

0

Android ile birlikte gelen JSONObject kullanıyorsanız, Kullanıcı tanımlı türlerden JSONObject/JSONArray'a dönüp daha sonra tekrar geri dönmekten yorulmazsınız. Bu dönüşümü otomatik olarak yapacak başka kütüphaneler vardır, bu yüzden JSON'un kodunu çözmek/kodlamak için basit bir veya iki satırdır.

ProductLineItem lineItem = ...; 
JSONObject json = new JSONObject(); 
json.put("name", lineItem.getName()); 
json.put("quantity", lineItem.getCount()); 
json.put("price", lineItem.getPrice()); 
... // do this for each property in your user defined class 
String jsonStr = json.toString(); 

Bu, hepsi ProductLineItem.toJSON() içinde kapsüllenmiş olabilir. Ayrıştırma benzerdir. ProductLineItem nesne = new ProductLineItem (JSONObject nesnesi): Ben JSONObject nesnesi alır ve benzeri nesne yaratan bir yapıcı oluşturmak ister

public class ProductLineItem { 
    private String name; 
    private int quantity; 
    private float price; 

    public MyObject(JSONObject json) { 
     name = json.getString("name"); 
     count = json.getInt("quantity"); 
     price = json.optFloat("price"); 
    } 
} 

diziler Handling çok aynıdır. Yani bir şey gibi:

public class ShoppingCart { 

    float totalPrice; 
    List<Rebate> rebates = new ArrayList<Rebate>(); 
    List<ProductLineItem> lineItems = new ArrayList<ProductLineItem>(); 


    public ShoppingCart(JSONObject json) { 
     totalPrice = json.getFloat("totalPrice"); 

     for(JSONObject rebateJson : json.getArray("rebates")) { 
      rebates.add(new Rebate(rebateJson)); 
     } 

     for(JSONObject productJson : json.getArray("lineItems")) { 
      lineItems.add(new ProductLineItem(productJson)); 
     } 
    } 

    public JSONObject toJSON() { 
     JSONObject json = new JSONObject(); 
     json.put("totalPrice", totalPrice); 

     JSONArray rebatesArray = new JSONArray(); 
     for(Rebate rebate : rebates) { 
      rebatesArray.put(rebate.toJSON()); 
     } 

     JSONArray lineItemsArray = new JSONArray(); 
     for(ProductLineItem lineItem : lineItems) { 
      lineItemsArray.put(lineItem.toJSON()); 
     } 

     json.put("rebates", rebatesArray); 
     json.put("lineItems", lineItemsArray); 

     return json; 
    } 
} 

Basit bir 2 nesne için bu kazan plaka kodunun oldukça önemli olduğunu görebilirsiniz. Bunu yapmaya devam edebilir veya sizin için tüm bu kolları bir kütüphane kullanabilirsiniz: Geçmişte bunun için Google'ın GSON kütüphanesini kullandım

http://flexjson.sourceforge.net

// serialize 
String json = new JSONSerializer().serialize(shoppingCart); 
// deserialize 
ShoppingCart cart = new JSONDeserializer<ShoppingCart>().deserialize(json, ShoppingCart.class); 
+0

Bu sorularımın en iyisini yanıtladı.Tüm amaçlar için sadece normal paylaşım tercihlerini kullanarak gittim. Basit bir yüksek puan sistemi uygulamak istedim.Onların paylaşılabileceğini düşündüm, bu tek bir dizgede paylaşılan puanları ve detayları paylaşıyordu tercihler ve daha sonra yeniden değerlendirme sırasında ayrıştırma. – shady2020

+0

Json dizelerini, yukarıdaki bu yöntemi kullanarak dilediğiniz gibi, paylaşılan tercihlere kesinlikle yazabilirsiniz. JSON libs kullanımı esasen doğrudan paylaşılan prefs'e yazarken kullanılan kodun aynısıdır. Nesnelerinizi modelinizden JSON'a veya paylaşılan prefs'e çevirmek için hala aynı çeviri kodudur. – chubbsondubs

0

(dize, int vb yüzer - Sorun yaşamaya gidiyoruz değil o ise).

Hangi durumda size (dizelerden oluşan bir dizi varsayılarak) Böyle bir şey yapmak gerekir: Açıkçası

String[] strArray = new String[jsonArray.length()]; 

for (int i = 0; i < jsonArray.length(); i++) { 
    strArray[i] = jsonArray.getString(i); 
} 

diğer ilkel türleri ile ilgileniyor eğer uygun kısaltmaları yapın.

İlgili konular