参见英文答案 > 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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)