Retrofit不进行Json解析,直接返回String

Android app开发 网络请求是到处可见
在网上看到很多框架,如:xUtils、volley、retrofit
现在很多文章讲述了 RxJava + Retrofit2.0 + MVP模式的整合
使用Retrofit网络请求,返回的都是对象,String是属于基本类型。

以下是Retrofit1.9相关设置 (Retrofit2.0设置有一点点不同,把“set”去掉或换成“add”就差不多了)


Retrofit不进行Json解析,直接返回String_第1张图片
【RestClient.java】.png
Retrofit不进行Json解析,直接返回String_第2张图片
【RestService.java】.png
Retrofit不进行Json解析,直接返回String_第3张图片
【MainActivity.java】.png

正确的返回字符串:{"code":0,"msg":"","app":0,"info":"","url":""}

尝试1:

用CallBack会报com.google.gson.JsonSyntaxException异常错误(是Gson的)
好像不能 返回字符串?

尝试2:

然后CallBack 返回object.toString={code:0,msg:,app:0,info:,url:}
得到的字符串没有了双引号。
(Gson解析异常com.google.gson.stream.MalformedJsonException)
很纠结!

尝试3:

CallBack 返回object.toString={},也不对。【注意:】

Retrofit不进行Json解析,直接返回String_第4张图片
【org.json.JSONObject】.png

尝试4:

CallBack 返回object.toString={ "code":0, "msg":"", "app":0, "info":"", "url":"" }。
【注意:不要混淆JSONObject 如上图,JsonObject如下图】


Retrofit不进行Json解析,直接返回String_第5张图片
【com.google.gson.JsonObject】.png

总结:

retrofit 可以得到String字符串的,要注意区分 JsonObject 和 JSONObject!

集体的智慧N

当时写这个原因是因为要用到返回的一个非正常的json数据,然而同事用volley,这样 就有多个网络请求框架,对整个app影响显而易见。
看到评论可以用 okhttp3.ResponseBody 类(public abstract class ResponseBody implements Closeable 是一个抽象类) ,测试一下可行。不过大家注意一下要捕获IO异常(IOException).

@Override
public void onNext(ResponseBody response) { 
    try {
        String result = response.string().trim();
        Log.e("ResponseBody", ",\tresult=" + result);
        if (!TextUtils.isEmpty(result)) { 
        }
    } catch (IOException e) {
        e.printStackTrace();
    } 
}

或者 okhttp3.Response类(public final class Response implements Closeable,注意 final修饰的类是无法有子类)

@Override
public void onNext(Response response) { 
    if(response.isSuccessful()){
        try {
            // response.body() 返回 ResponseBody
            String result = response.body().string().trim();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

还有很多方式:如写一个类继承Response或者ResponseBody,处理掉异常。
欢迎评论。
个人推荐使用 Response 获取字符串。

你可能感兴趣的:(Retrofit不进行Json解析,直接返回String)