abbenyyy
V2EX  ›  Android

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

  •  
  •   abbenyyy · Feb 14, 2017 · 18506 views
    This topic created in 3556 days ago, the information mentioned may be changed or developed.

    因为公司的后端弄得接口返回不是正确格式的 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 提取服务器返回的字符串然后再自行处理,谢谢。

    13 replies  •  2017-02-15 09:06:11 +08:00
    ilumer
    ilumer
    Feb 14, 2017 via Android
    1
    retrofit adapter 里有个 results 泛型类,这个类里面有 response
    loshine1992
    loshine1992
    Feb 14, 2017
    2
    自己实现一个 adapter
    rockyou12
    rockyou12
    Feb 14, 2017
    3
    简单点写个 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
    brucezz
    Feb 14, 2017
    4
    可以自定义 convertor ,在其中做字符串的处理,解析成正常的 model ,返回给上层使用。
    Grubber
    Grubber
    Feb 14, 2017
    5
    ScalarsConverterFactory
    basefas
    basefas
    Feb 14, 2017❤️1
    6
    这种情况不是应该去怼后端么
    xingda920813
    xingda920813
    Feb 14, 2017
    7
    怼后端 +1, 公司的后端弄得接口返回不是正确格式的 JSON 数据, 这也能忍? 看到接口是 ashx, 说明后端是 .NET, 你懂的. 结合楼主之前发的帖子, 趁年终奖拿了赶快去更好的地方吧.
    xingda920813
    xingda920813
    Feb 14, 2017
    8
    楼上技术方面解答的都很好, 尤其是 #3, map 操作符变换 Observable, 但 JSON 不合法明显是服务端的错误.
    nashxk
    nashxk
    Feb 14, 2017
    9
    自己封装一个 Interceptor ;如果用 Gson 的话,记得“ new GsonBuilder().setLenient().create()”。。这个后端不返回标准的 JSON ,真应该去怼后端了。。。
    3pmtea
    3pmtea
    Feb 14, 2017
    10
    用 converter+1 ,如果打算自己写 converter 的话,@Override 的 responseBodyConverter 方法里直接 return ResponseBody::string 就行了
    lijy91
    lijy91
    Feb 14, 2017
    12
    建议还是和后端沟通,返回规范化的数据。
    jinhan13789991
    jinhan13789991
    Feb 15, 2017 via Android
    13
    http://www.jianshu.com/p/2263242fa02d
    我之前的公司后台返回的数据格式有六七种之多,看了这个博客后,我自己模仿写了一个。完美屏蔽底层。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2343 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 00:16 · PVG 08:16 · LAX 16:16 · JFK 19:16
    ♥ Do have faith in what you're doing.