如何在不使用GSON或android中的任何其他库的情况下使用改造获得响应为String

如何在不使用GSON或android中的任何其他库的情况下使用改造获得响应为String,第1张

概述参见英文答案>Unabletocreatecalladapterforclassexample.Simple                                    12个我想从以下Api得到回应:https://api.github.com/users/username但我不知道如何获得String的响应,以便我可以使用String来

参见英文答案 > Unable to create call adapter for class example.Simple                                    12个
我想从以下API得到回应:

https://api.github.com/users/username

但我不知道如何获得String的响应,以便我可以使用String来解析并获取JsONObject.

使用的改装版本:

retrofit:2.0.0-beta1

我一直试过这个:

public interface GitHubService {        @GET("/users/{user}")        public String ListRepos(@Path("user") String user,Callback<String> callback);    }

检索:

GitHubService service = retrofit.create(GitHubService.class);        service.ListRepos("username", new Callback<String>() {            @OverrIDe            public voID onResponse(Response response) {                System.out.println(response.toString());            }            @OverrIDe            public voID onFailure(Throwable t) {            }        });

例外:

Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for class java.lang.String. TrIEd:    * retrofit.ExecutorCallAdapterFactory            at retrofit.Utils.resolveCallAdapter(Utils.java:67)            at retrofit.MethodHandler.createCallAdapter(MethodHandler.java:49)

任何帮助将非常感激.

解决方法:

**更新**已添加一个标量转换器进行改造,允许使用比我下面的原始答案更少的仪式的字符串响应.

示例界面 –

public interface GitHubService {    @GET("/users/{user}")    Call<String> ListRepos(@Path("user") String user);}

将ScalarsConverterFactory添加到您的改造构建器中.注意:如果使用ScalarsConverterFactory和其他工厂,请先添加标量工厂.

Retrofit retrofit = new Retrofit.Builder()    .baseUrl(BASE_URL)    .addConverterFactory(ScalarsConverterFactory.create())    // add other factorIEs here, if needed.    .build();

您还需要在gradle文件中包含标量转换器 –

implementation 'com.squareup.retrofit2:converter-scalars:2.1.0'

—原始答案(仍然有效,只需更多代码)—

我同意@CommonsWare,你想拦截自己处理JsON的请求似乎有点奇怪.大多数情况下,POJO拥有您需要的所有数据,因此无需在JsONObject域中乱七八糟.我怀疑如果你需要 *** 纵JsON,使用自定义gson TypeAdapter或改进Converter可以更好地解决你的具体问题.但是,改造通过Gson提供了更多的JsON解析.它还管理REST请求中涉及的许多其他繁琐任务.仅仅因为你不想使用其中一个功能,并不意味着你必须把整个事情扔掉.有时你只想获得原始流,所以这里是如何做到的 –

首先,如果您使用的是Retrofit 2,则应该开始使用Call API.而不是发送一个对象作为类型参数转换,使用来自okhttp的ResponseBody –

public interface GitHubService {    @GET("/users/{user}")    Call<ResponseBody> ListRepos(@Path("user") String user);}

然后你可以创建和执行你的电话 –

GitHubService service = retrofit.create(GitHubService.class);Call<ResponseBody> result = service.ListRepos(username);result.enqueue(new Callback<ResponseBody>() {    @OverrIDe    public voID onResponse(Response<ResponseBody> response) {        try {            System.out.println(response.body().string());        } catch (IOException e) {            e.printstacktrace();        }    }    @OverrIDe    public voID onFailure(Throwable t) {        e.printstacktrace();    }});

注意上面的代码在响应对象上调用string(),它将整个响应读入String.如果您将正文传递给可以摄取流的内容,则可以调用charStream().请参阅ResponseBody文档.

总结

以上是内存溢出为你收集整理的如何在不使用GSON或android中的任何其他库的情况下使用改造获得响应为String全部内容,希望文章能够帮你解决如何在不使用GSON或android中的任何其他库的情况下使用改造获得响应为String所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1103554.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存