2015-10-08 16 views
5

Bir Android uygulaması için bir JSON ayrıştırıcısı üzerinde çalışıyorum. Veri için sunucuyu aradığımda, bazı isteğe bağlı alanlar var, bunu, GSON dönüştürücüyü kullanarak Retrofit'te nasıl halledebilirim?Android için Retrofit'te isteğe bağlı JSON alanları nasıl kullanılır?

Normal tepki

{ 
    "status":"SUCCESS", 
    "class-1":{ 
     "class.enddate":"Jan/10/2016", 
     "class.startdate":"Jan/10/2015", 
     "class.title":"Physics 1", 
     "class.short.description":"Physics 1", 
     "class.description":"This is a Physics Class" 
    } 
} 

Alternatif tepkisi, bazı alanlar herhangi bir veri yok

{ 
    "status":"SUCCESS", 
    "class-1":{ 
    "class.enddate":"Jan/10/2016", 
    "class.startdate":"Jan/10/2015", 
    "class.title":"Physics 1" 
    } 
} 

POJO Sınıflar

public class MyClass { 
    @Expose @SerializedName("status") 
    public String status; 

    @Expose @SerializedName("class-1") 
    public MyClassInformation myClassInformation; 
} 

public class MyClassInformation { 
    @Expose @SerializedName("class.title") 
    public String classTitle; 

    @Expose @SerializedName("class.short.description") 
    public String classShortDescription; 

    @Expose @SerializedName("class.description") 
    public String classDescription; 

    @Expose @SerializedName("class.startdate") 
    public String startDate; 

    @Expose @SerializedName("class.enddate") 
    public String endDate; 
} 

nasıl POJO sınıfları içinde oluşturabilirim Mevcut olmayan isteğe bağlı alanları işlemenin bir yolu ? Şu anda, alanlar kaybolduğunda tüm MyClassInformation nesnesi NULL olur, Lütfen yardım edin.

+0

Neyi denediniz/öğrendiniz? Araştırmanızı göstermediniz ve sorunuzun kapanmaya başlaması daha olasıdır. – Sufian

+0

'@Expose @SerializedName (" class-1 ") public SakaiClassInformation sakaiClassInformation;' kod snippet'inizdeki herhangi bir sınıfla eşleşmiyor. Belki de orada MyClassInformation 'var mı demek istediniz (veya MyClassInformation' sahip olduğunuz ne var mı?) –

+0

Buna göre değiştirdim, sadece bir yazım hatası – joelj

cevap

2

Deneme ve hata ile bu sorunu çözmeyi başardım, @Expose ek açıklamasını kaldırarak ve Gson yapıcısını değiştirerek çalışmayı başarabildim ... Artık tüm nesneler alanları eksikse ve yalnızca dışlanmışsa veya alınıyorsa eksik alanlar null olarak görünür. Bu benim

Gson gson = new GsonBuilder().create(); 

için

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); 

itibaren değişti budur

benzer bir cevap isteyen herkese, yardımcı olur.

0

Birkaç yıl önce bununla uğraştım. Muhtemelen bunun için iyi bir cevap yoktur. En azından farkında olduğum şey değil. kabul

3 seçenek: must-alanları olarak

  1. Set tüm üyeleri (hepsi önceden bilinen varsayarak) ve tip mantıklı (her zaman ulaşamadığı yerlere hiçbir değer alınan durumda Null şekilde ayarlayabilirsiniz örneğin ilkel türler için mantıklı.) Burada size JSON'u iletenler üzerinde daha fazla iş koyarsınız ama java kodunuz daha basit, ancak daha az esnektir.
  2. İsteğe bağlı alanları, anahtarın ve değerlerin Dizge'nin bulunduğu anahtar değer çiftleri kapsayıcısının içine yerleştirin. İsteğe bağlı özellikler aktarılmadığında kapsayıcı boş bir liste olabilir. Burada daha fazla esnekliğe sahipsiniz, ancak daha özel (de) serileştiriciler oluşturmaya çalışmak zorundasınız. o yardımcı olur ve iyi şanslar 3.

    Umut

  3. bir 1 kombinasyonunu ve 2.
Her seçenek artıları ve eksileri vardır

kullanın ve seçeneği ile sona erdi!

+0

Teşekkürler, ama çalışmayı başardım ... cevabımı gör – joelj

İlgili konular