2015-03-20 7 views
6

यह मेरा Json हैरेट्रोफिट का उपयोग कर जेसन सरणी को कवर करना?

[ 
{ 
    "nata_center":{ 
    "id":67, 
    "nata_center_name":"Primo Institute of Design" 
    } 
}, 
{ 
    "nata_center":{ 
    "id":68, 
    "nata_center_name":"Sai Ganesh Institute" 
    } 
} 
] 

Pojo कक्षाएं

public class Explorer { 
    NataCenter nataCenter; 

    public NataCenter getNataCenter() { 
     return nataCenter; 
    } 

    public void setNataCenter(NataCenter nataCenter) { 
     this.nataCenter = nataCenter; 
    } 
} 

2)

public class NataCenter { 
    public String id; 
    public String nata_center_name; 

    public NataCenter(String id,String nata_center_name) 
    { 
     this.id=id; 
    this.nata_center_name=nata_center_name; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getId() { 
     return id; 
    } 

    public String getNata_center_name() { 
     return nata_center_name; 
    } 

    public void setNata_center_name(String nata_center_name) { 
     this.nata_center_name = nata_center_name; 
    } 
} 

GetMethhodinRetrofit

void getCenter(@Query("id") int id,Callback<List<Explorer>> callback); 

MainActvitiy.java

 service.getCenter(i,new Callback<List<Explorer>>() { 
         @Override 
         public void success(List<Explorer> o, Response response) { 
          Log.d(TAG,"Success" + "Response"+o.toString()); 

         @Override 
         public void failure(RetrofitError error) { 
          Log.d(TAG,"Failed"+error.toString()); 

         } 
        }); 

यह त्रुटि संदेश

Failedretrofit.RetrofitError: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ 
+0

आप json में कुछ बदल सकते हैं? –

+0

या यकीन है कि जेसन के साथ कोई समस्या है? – Asthme

+0

मेरे लिए नहीं :) लेकिन यदि आप एक और टैग जोड़ते हैं तो यह आसान होगा –

उत्तर

7

है असल में समस्या आप json में रूट के रूप में सरणी है कि है। आपको ऑब्जेक्ट बनाना होगा जो इस ऑब्जेक्ट के लिए इस सूची और deserializator के लिए कंटेनर के रूप में उपयोग किया जाएगा। मैंने एक्सप्लोरर को कंटेनर के रूप में इस्तेमाल किया, यह नीचे जैसा दिखता है:

public class Explorer { 

    List<NataCenter> nataCenter; 


    public List<NataCenter> getNataCenter() { 
     return nataCenter; 
    } 

    public void add(NataCenter nataCenterItem){ 
     if(nataCenter == null){ 
      nataCenter = new LinkedList<>(); 
     } 
     nataCenter.add(nataCenterItem); 
    } 
} 

मेरा समाधान सिर्फ स्पष्टीकरण है। आप अपने Explorer कक्षा में सुधार कर सकते हैं। सूची के लिए सेटटर सबसे अच्छा विचार नहीं है।

NataCenter वर्ग,

पिछले तरह लग रहा है महत्वपूर्ण थिंक में से एक ExplorerDeserializerJson वर्ग है। इसका उपयोग जेसन को deserialize करने के लिए किया जाता है और यह नीचे जैसा दिखता है:

public class ExplorerDeserializerJson implements JsonDeserializer<Explorer> { 

    @Override 
    public Explorer deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) 
      throws JsonParseException { 
     Explorer explorer = new Explorer(); 
     JsonArray jsonArray = je.getAsJsonArray(); 
     Gson gson = new Gson(); 
     for(JsonElement element : jsonArray){ 
      JsonObject jsonObject = element.getAsJsonObject(); 
      NataCenter nataCenter = gson.fromJson(jsonObject.get("nata_center"), NataCenter.class); 
      explorer.add(nataCenter); 
     } 
     return explorer; 

    } 
} 

इसके अतिरिक्त मैं आपके ग्राहक को बदलता हूं। अब Explorer एक प्रतिक्रिया है।

void getCenter(@Query("id") int id,Callback<Explorer> callback); 

पिछले आप जगह है जहाँ आप RestAdapter बनाने में नए deserializer रजिस्टर करने के लिए नीचे के रूप में दिखाया गया है है के रूप में:

RestAdapter restAdapter = new RestAdapter.Builder() 
        .setEndpoint(BuildConfig.IP) 
        .setConverter(new GsonConverter(new GsonBuilder() 
          .registerTypeAdapter(Explorer.class, new ExplorerDeserializerJson()) 
          .create())) 
        .build(); 
      restAdapter.create(CenterClient.class).getCenter(1); 
+0

मैं जांच करूँगा और आपको – Asthme

+0

@ पता चलेगा जब मैंने Log.d (TAG, o.getNataCenter() को आज़माया है। (0) .getNata_center_name()); कुछ इस तरह। – Asthme

+0

यह दिखा रहा है कि त्रुटि नहीं डाली जा सकती .. – Asthme

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