Retrofit这东西我就不多做解释了,反正最近应用很广,基本都快和OkHttp一起成为安卓的事实网络访问标准框架了。

这么好的一个东西,官网文档实在是不算太好,说的不太清晰。按官网的经常会有“Could not locate ResponseBody converter for”问题。

反正折腾了一番,终于跑出来了一个例子。这里把正确的例子写出来,方便大家参考。

首先要注意的是Retrofit准确的说不是Anroid 的HttpClient,而是Java的HttpClient,所以用Java工程运行Demo的代码即可。

文中我自己搭建了一个spring 的rest服务,很简单,就是访问greeting/{name},会返回一个User对象,把name赋值给这个user对象。

  1. public class User {
  2. int id;
  3. String name;
  4.  
  5. public String getName() {
  6. return name;
  7. }
  8.  
  9. public void setName(String name) {
  10. this.name = name;
  11. }
  12.  
  13. public int getId() {
  14. return id;
  15. }
  16.  
  17. public void setId(int id) {
  18. this.id = id;
  19. }
  20.  
  21. @Override
  22. public String toString() {
  23. return "User{" +
  24. "id=" + id +
  25. ", name='" + name + '\'' +
  26. '}';
  27. }
  28. }

1,依赖引入。

这个十分重要。。。这货升级了一下竟然改了包名,,,蛋疼。Maven,Gradle都行,Gradle的:

  1. compile 'com.squareup.retrofit2:retrofit:2.0.0-beta3'
  2. compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3'
  3. compile 'com.google.code.gson:gson:2.3'

Maven的:

  1. <dependency>
  2. <groupId>com.squareup.retrofit2</groupId>
  3. <artifactId>retrofit</artifactId>
  4. <version>2.0.0-beta3</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.squareup.retrofit2</groupId>
  8. <artifactId>converter-gson</artifactId>
  9. <version>2.0.0-beta3</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>com.google.code.gson</groupId>
  13. <artifactId>gson</artifactId>
  14. <version>2.3</version>
  15. </dependency>

注意看,groupId是不一样的。如果想直接接收对象,那要引入gson和converter。不然就只能接收字符串。

2,写接口

  1. import retrofit2.Call;
  2. import retrofit2.http.GET;
  3. import retrofit2.http.Path;
  4.  
  5. /**
  6. * Created by csonezp on 16-1-29.
  7. */
  8. public interface GreetingServicce {
  9. @GET("/greeting/{name}")
  10. Call<User> getGreeting(@Path("name") String name);
  11. }

service里指定了访问的rest Api地址,路径变量,返回值。

3,构建Retrofit实例,访问网络。

这个自己随便建立个Java文件,将代码放进去就行。

  1. import com.google.gson.Gson;
  2. import retrofit2.Call;
  3. import retrofit2.GsonConverterFactory;
  4. import retrofit2.Response;
  5. import retrofit2.Retrofit;
  6.  
  7. import java.io.IOException;
  8.  
  9. /**
  10. * Created by csonezp on 16-1-29.
  11. */
  12. public class Test {
  13. public static void main(String[] args) throws IOException {
  14. Retrofit retrofit = new Retrofit.Builder().baseUrl("http://192.168.10.225:8080")
    .addConverterFactory(GsonConverterFactory.create(new Gson())).build();
  15. GreetingServicce servicce = retrofit.create(GreetingServicce.class);
  16. Call<User> call = servicce.getGreeting("ss");
  17. Response<User> response = call.execute();
  18. System.out.print(response.body().toString());
  19. }
  20. }

注意红色部分,如果想直接接收到对象,则需要添加这个。

文中是同步访问网络的方式,要想在Android中使用,则需单开线程或者是换成异步访问。

现在运行你的项目就可以了。

把Spring文件也发出来吧:

  1. import com.example.bean.User;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  4. import org.springframework.web.bind.annotation.*;
  5.  
  6. import java.util.concurrent.atomic.AtomicLong;
  7.  
  8. /**
  9. * Created by csonezp on 16-1-21.
  10. */
  11. @RestController
  12. @EnableAutoConfiguration
  13. public class SimpleController {
  14. private final AtomicLong counter = new AtomicLong();
  15. private static final String template = "Hello,%s!";
  16.  
  17. @RequestMapping("/")
  18. @ResponseBody
  19. String home() {
  20. return "Hello World!";
  21. }
  22.  
  23. @RequestMapping(value = "/greeting/{name}",method = RequestMethod.GET)
  24. public User greeting(@PathVariable String name) {
  25. return new User((int) counter.incrementAndGet(),
  26. String.format(template, name));
  27. }
  28.  
  29. public static void main(String[] args) throws Exception {
  30. SpringApplication.run(SimpleController.class, args);
  31. }
  32. }

新版Retrofit 2可运行例子(解决Could not locate ResponseBody converter for问题)的更多相关文章

  1. [经验] 新版SkyIAR、Easy Image X在有些PE里不能运行的解决办法

    [经验] 新版SkyIAR.Easy Image X在有些PE里不能运行的解决办法 xxwl2008 发表于 2013-1-26 11:58:38 https://www.itsk.com/threa ...

  2. Windows Server 2008 任务计划无法自动运行的解决办法

    问题:编写的bat脚本,直接执行,成功:但是在任务管理器中配置该任务,运行不成功,结果显示为:0x1,系统环境为 Windows Server 2008. 分析:bat任务没有调用执行. 解决方案: ...

  3. genymotion+Oracle VM VirtualBox + eclipse + appium 脚本运行慢解决步骤

    genymotion+Oracle VM VirtualBox + eclipse + appium 脚本运行慢解决步骤 1.lenove 机器启动时按F1 进入bios 设置,设置cpu virtu ...

  4. DirectX11--教程项目无法编译、运行的解决方法

    综述 对于Win10系统的大多数用户来说,可以直接编译本教程对应的项目并运行.但也有部分用户由于某些原因可能会出现无法编译的情况. DirectX11 With Windows SDK完整目录 欢迎加 ...

  5. [vuejs] 终端npm run dev 不能自动打开浏览器运行项目解决办法

    终端执行: npm run dev 出现: I Your application is running here: http://localhost:8080 但并没有打开浏览器运行项目 解决办法: ...

  6. 【翻译自mos文章】job 不能自己主动运行的解决方法

    job 不能自己主动运行的解决方法 參考原文: Jobs do not execute automatically (Doc ID 309945.1) 适用于: Oracle Server - Ent ...

  7. ProxyStrike运行bug解决办法

     ProxyStrike运行bug解决办法 由于curl中参数CURLOPT_SSL_VERIFYHOST的值取消原有的值1,导致ProxyStrike无法正常运行.所以,要运行该工具,需要手动修改/ ...

  8. $ gulp watch 运行出错解决方法

    $ gulp watch 运行出错解决方法   $ gulp watch     如果你出现了如下报错信息: gulp-notify: [Laravel Elixir] Browserify Fail ...

  9. 树莓派 Learning 002 装机后的必要操作 --- 05 给树莓派搭建“x86 + pi”环境 -- 安装**32位运行库** -- 解决`E:未发现软件包 xxx` 问题

    树莓派 装机后的必要操作 - 给树莓派搭建"x86 + pi"环境 – 安装32位运行库 – 解决E:未发现软件包 xxx 问题 我的树莓派型号:Raspberry Pi 2 Mo ...

随机推荐

  1. POJ 3041 -- 二分图匹配

    题意:有个N*N的网格,有一部分格子里有陨石,小明有很牛逼的武器,打一枪后一行或一列的陨石就没了,给出陨石分布,求最小打炮数. 分析:其实就是Konig定理.记最小打炮数为m,在网格里你最多可以找出M ...

  2. JDK运行.Jar文件的控制台命令是什么

    cd进入jar文件所在目录,执行如下语句: java -jar jar文件名如:java -jar hello.jar

  3. JDBC的作用及重要接口

    JDBC是由一系列连接(Connection).SQL语句(Statement)和结果集(ResultSet)构成的,其主要作用概括起来有如下3个方面:    建立与数据库的连接.    向数据库发起 ...

  4. Dr.com──加密方式(网页端)

    Dr.com是城市热点公司开发的宽带计费系统,可以控制网络进行管理,认证,计费,限速……许多的高校与企业都有使用. 从接触到drcom就很感兴趣(原因想必大家都懂...) drcom登陆(认证)方式又 ...

  5. LintCode Implement Queue by Two Stacks

    1. stack(先进后出): pop 拿出并返回最后值: peek 返回最后值: push 加入新值在后面并返回此值. 2. queue(先进先出) : poll = remove 拿出并返第一个值 ...

  6. Java Socket长连接示例代码

    SocketListenerPusher.java代码如下: import java.io.IOException; import java.net.InetSocketAddress; import ...

  7. 每天一个命令ls 2015/4/1

    ls命令可以说是Linux下最常用的命令 -a 列出目录下的所有文件,包括以 . 开头的隐含文件.-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出.-c 输出文件的 i ...

  8. Python2.7.12开发环境构建(自动补全)

    一.安装readline-devel包 Python的编译安装依赖于这个包 yum -y install readline-devel 二.安装Python2.7.12 Python官方网站(到此处下 ...

  9. nagios监控系统安装及配置

    Nagios通常由一个主程序(Nagios).一个插件程序(Nagios-plugins)和四个可选的ADDON(NRPE.NSCA.NSClient++和NDOUtils)组成.Ngios的监控工作 ...

  10. Find Median from Data Stream

    常规方法 超时 class MedianFinder { vector<int> coll; public: MedianFinder(){ } void heapfu(vector< ...