请教下 retrofit2 配合 RXJava 如何提取返回的字符串?谢谢!

2017-02-14 10:46:24 +08:00
 abbenyyy

因为公司的后端弄得接口返回不是正确格式的 JSON 数据,所以要自己提取返回的字符串再处理。

单纯用 retrofit2 提取返回的字符串我知道,如下:

接口定义:

    @GET("Expand/WebAPI/Handler.ashx")
    Call<ResponseBody> getSysParaNames(@Query("action") String action
            , @Query("SysParaNames") String sysParaNames
    );

然后使用的时候利用 ResponseBody.body().string 就可以获得服务器返回的字符串。

但最近在研究 retrofit2 配合 RXJava 使用,搜索了一下,自己也试了一下,发觉无法提取服务器返回的字符串,所以请教一下大家,怎么做可以 retrofit2 配合 RXJava 提取服务器返回的字符串然后再自行处理,谢谢。

14191 次点击
所在节点    Android
13 条回复
ilumer
2017-02-14 10:58:12 +08:00
retrofit adapter 里有个 results 泛型类,这个类里面有 response
loshine1992
2017-02-14 11:00:27 +08:00
自己实现一个 adapter
rockyou12
2017-02-14 11:12:30 +08:00
简单点写个 Observable<String> getSomething(),然后写个工具类,加个带泛型的方法 map 转成需要的对象

public static <T> Observable<T> map(Observable<String> o, final Class<T> clazz){
return o.map(s-> gson.fromJson(s,clazz));
}

要是能力强可以考虑自己写个 retrofit 的 adapter
brucezz
2017-02-14 11:17:32 +08:00
可以自定义 convertor ,在其中做字符串的处理,解析成正常的 model ,返回给上层使用。
Grubber
2017-02-14 11:18:22 +08:00
ScalarsConverterFactory
basefas
2017-02-14 11:20:57 +08:00
这种情况不是应该去怼后端么
xingda920813
2017-02-14 11:31:03 +08:00
怼后端 +1, 公司的后端弄得接口返回不是正确格式的 JSON 数据, 这也能忍? 看到接口是 ashx, 说明后端是 .NET, 你懂的. 结合楼主之前发的帖子, 趁年终奖拿了赶快去更好的地方吧.
xingda920813
2017-02-14 11:36:23 +08:00
楼上技术方面解答的都很好, 尤其是 #3, map 操作符变换 Observable, 但 JSON 不合法明显是服务端的错误.
nashxk
2017-02-14 11:40:22 +08:00
自己封装一个 Interceptor ;如果用 Gson 的话,记得“ new GsonBuilder().setLenient().create()”。。这个后端不返回标准的 JSON ,真应该去怼后端了。。。
3pmtea
2017-02-14 12:00:49 +08:00
用 converter+1 ,如果打算自己写 converter 的话,@Override 的 responseBodyConverter 方法里直接 return ResponseBody::string 就行了
3pmtea
2017-02-14 12:06:09 +08:00
lijy91
2017-02-14 12:57:44 +08:00
建议还是和后端沟通,返回规范化的数据。
jinhan13789991
2017-02-15 09:06:11 +08:00
http://www.jianshu.com/p/2263242fa02d
我之前的公司后台返回的数据格式有六七种之多,看了这个博客后,我自己模仿写了一个。完美屏蔽底层。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/340312

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX