2016-07-07 85 views
0

最近,我尝试在我的项目中使用Rxjava和Retrofit,但我厌倦了服务器返回的不规则数据。例如,获取列表的接口可能返回: [ {"title":"title1","desc":"desc1"}, {"title":"title2","desc":"desc2"}, {"title":"title3","desc":"desc3"} ] 和它可能返回: {"message":"error msg","status":"failed"} 所以,如果我用Observable<Response<List<Entity>>>解析的结果,当它返回的JSONObject,将反之亦然failed.And。 我想知道如何处理这种情况。如何用Gson,Rxjava和Retrofit来解释不规则的Json

另一个接口返回奇怪的数据是: { "status":"success", "message":"success msg", "data":"{\"userName\":\"name\",\"userId\":\"2016\"}" } 在这种情况下,我认为data应该是一个JsonObject,但它返回一个字符串,所以我不能使用 public class HttpResponse<T>{ private String status; private String message; private T data; } 解析result.Because它可以不解析字符串data分成User实体

有没有办法解决这个问题?

回答

0

你可以,如果它和对象或数组使用

if (json instanceof JSONArray) {} 

字符串的问题,您可以修复coverting检查字符串JSON

JsonObject jsonData = new JSONObject(data); 

但在服务器到底应该返回到你一致的数据,如果你无法控制服务器,请尝试这种解决方法。

+0

因为我使用改造为网络架构:'''改造改型=新Retrofit.Builder() .baseUrl(的baseUrl) .client(客户端) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory( GsonConverterFactory.create(gson)) .build();''' – Even2015

+0

所以这些方法可能不适合我的情况。 – Even2015

0

你可以使用OkHttp's application level interceptor并试图解析其作为{"message":"error msg","status":"failed"}对象分析响应数据,如果成功,status确实failed那么你可以抛出一个异常,并适当的消息,如果可能的正确类型,这将导致在Retrofit中通过onError通知返回抛出的异常。