2015-10-08 4 views
5

मैं एक एंड्रॉइड एप्लिकेशन के लिए जेएसओएन पार्सर पर काम कर रहा हूं। जब मैं डेटा के लिए सर्वर को कॉल करता हूं, तो कुछ वैकल्पिक फ़ील्ड होते हैं, मैं इसे जीएसओएन कनवर्टर का उपयोग करके रेट्रोफिट में कैसे संभाल सकता हूं?एंड्रॉइड के लिए रेट्रोफिट में वैकल्पिक JSON फ़ील्ड को कैसे प्रबंधित करें?

सामान्य प्रतिक्रिया

{ 
    "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" 
    } 
} 

वैकल्पिक प्रतिक्रिया, कुछ क्षेत्रों में किसी भी डेटा नहीं है जब

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

POJO क्लासेस

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; 
} 

मैं में POJO कक्षाएं कैसे बना सकता हूँ मौजूद नहीं होने वाले वैकल्पिक फ़ील्ड को संभालने का एक तरीका ? फिलहाल फ़ील्ड गायब होने पर संपूर्ण MyClassInformation ऑब्जेक्ट न्यूल हो जाता है, कृपया मदद करें।

+0

आपने क्या प्रयास किया/पता चला है? आपने अपना शोध नहीं दिखाया है और आपका प्रश्न बंद होने की संभावना अधिक है। – Sufian

+0

'@ एक्सपोज़र @ सेरियलाइज्डनाम (" कक्षा -1 ") सार्वजनिक साकाई क्लास सूचना sakaiClassInformation;' आपके कोड स्निपेट में किसी भी वर्ग से मेल नहीं खाता है। क्या आपके पास शायद 'MyClassInformation' होना चाहिए (या 'MyClassInformation' का नाम बदलकर आपके पास क्या है)? –

+0

मैंने इसे तदनुसार बदल दिया है, क्षमा करें बस एक टाइपो – joelj

उत्तर

2

मैंने इसे परीक्षण और त्रुटि से हल करने में कामयाब रहा, इसे @ एक्सपोज़ एनोटेशन को हटाकर और जीसन कन्स्ट्रक्टर को बदलकर काम करने में कामयाब रहा ... अब पूरे ऑब्जेक्ट को शून्य या हटाया नहीं जाता है यदि फ़ील्ड गुम हो और केवल गायब फ़ील्ड शून्य के रूप में दिखाई देते हैं।

यह है कि मैं क्या

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

से बदल गया है,

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

करने के लिए है आशा है कि यह किसी को भी, जो एक समान जवाब की तलाश में है में मदद करता है।

0

मैंने इस कुछ साल पहले संघर्ष किया था।

शायद इसके लिए कोई अच्छा जवाब नहीं है। कम से कम नहीं कि मुझे पता है।

3 विकल्पों पर विचार किया:

  1. सभी के रूप में होना चाहिए क्षेत्रों सदस्यों सेट (यह मानते हुए कि वे सभी पहले से जाना जाता है) और उन्हें Null करने के लिए सेट मामले में कोई मूल्य नहीं मिला जहां प्रकार मेकअप भावना (यह हमेशा नहीं होता है उदाहरण के लिए आदिम प्रकार के लिए भावना बनाओ)। यहां आप उन लोगों पर अधिक काम करते हैं जो आपको JSON पास करते हैं लेकिन आपका जावा कोड सरल है, हालांकि कम लचीला है।
  2. कुंजी फ़ील्ड जोड़े के कंटेनर के अंदर वैकल्पिक फ़ील्ड सेट करें जहां कुंजी और मान को स्ट्रिंग स्ट्रिंग हैं। यदि कोई वैकल्पिक गुण पारित नहीं किया गया है तो कंटेनर एक खाली सूची हो सकती है। यहां आपके पास अधिक लचीलापन है लेकिन कड़ी मेहनत (डी) धारावाहिक बनाने के लिए कठिन परिश्रम करना है।
  3. 1 का एक संयोजन और 2.

हर विकल्प पक्ष-विपक्ष है का उपयोग करें और मैं विकल्प के साथ समाप्त हो गया 3.

आशा है कि यह मदद करता है और अच्छी किस्मत!

+0

धन्यवाद, लेकिन मैं इसे काम करने में कामयाब रहा ... मेरा जवाब देखें – joelj

संबंधित मुद्दे