2016-12-06 43 views
0


我試圖創建一個基於動態響應轉換器
利用改造,至於現在我有2個不同的答案從服務器返回 - 一個表示失敗和一個表示有效響應如何使用同一個適配器\ callabck嘗試解析兩個不同的對象?與改造的JSON響應多個轉換器

+3

你或許應該提供JSON :) – JamesSwinton

回答

0

如果數據是json數據,則可以將其解析爲java bean。 你可以使用Gson來解析它。

1添加LIB

compile 'com.squareup.retrofit2:converter-gson:2.1.0' 
compile 'com.google.code.gson:gson:2.7' 

2創建改造 私人改造改型=新Retrofit.Builder() .baseUrl(Api.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build( );

只需添加一個Gson轉換器。

例如,

// success 
{"retcode":0,"result":{"vfwebqq":"xxxx"}} 
// failed 
{"retcode":100,"result":{}} 

3創建豆接收數據。

public class Result { 
    public String retcode; 
    public Info result; 

    public static class Info { 
     public String vfwebqq; 
    } 
} 

4然後你可以在改造界面中返回一個bean對象。

@GET("xxx") 
Result getHome(); 
0

其實我不太在乎你在說什麼,你面對的是什麼確切的問題。但是,我腦海中浮現的第一件事就是提供自定義JsonDeserializer。它應該像水木清華這樣的:

public class CustomDeserializer implements JsonDeserializer<List<CustomData>> { 
    @Override 
    public List<CustomData> deserialize(JsonElement json, Type typeOfT, 
      JsonDeserializationContext context) throws JsonParseException { 
     List<CustomData> customDataSet = new ArrayList<>(); 
     Iterator<JsonElement> iterator = ((JsonObject) json).get("data").getAsJsonObject().get(
       "records").getAsJsonArray().iterator(); 
     while (iterator.hasNext()) { 
      JsonElement element = iterator.next(); 
      CustomData customData = ServiceGenerator.mGson.fromJson(element, CustomData.class); 
      customDataSet.add(customData); 
     } 
     return customDataSet; 
    } 
} 

這只是其應用於RetrofitBuilder只是爲了讓生活更輕鬆(也許)一個自定義的解析器類的例子。 之後,您需要:根據您的問題

Type listType = new TypeToken<List<CustomData>>() { 
    }.getType(); 
    mGson = new GsonBuilder().registerTypeAdapter(listType, new CustomDeserializer()).create(); 
    builder = 
      new Retrofit.Builder() 
        .addConverterFactory(GsonConverterFactory.create(mGson)) 
        .baseUrl(API_BASE_URL); 
    retrofit = builder.build();