转载

新版Retrofit 2可运行例子(解决Could not locate ResponseBody converter for问题)

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

这么好的一个东西,官网文档实在是渣,,我也不想吐槽了。。。按官网的经常会有“ Could not locate ResponseBody converter for ”问题。

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

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

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

新版Retrofit 2可运行例子(解决Could not locate ResponseBody converter for问题)

public class User  {     int id;     String name;      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     }      public int getId() {         return id;     }      public void setId(int id) {         this.id = id;     }      @Override     public String toString() {         return "User{" +                 "id=" + id +                 ", name='" + name + '/'' +                 '}';     } }

1,依赖引入。

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

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

Maven的:

<dependency>             <groupId>com.squareup.retrofit2</groupId>             <artifactId>retrofit</artifactId>             <version>2.0.0-beta3</version>         </dependency>         <dependency>             <groupId>com.squareup.retrofit2</groupId>             <artifactId>converter-gson</artifactId>             <version>2.0.0-beta3</version>         </dependency>         <dependency>             <groupId>com.google.code.gson</groupId>             <artifactId>gson</artifactId>             <version>2.3</version>         </dependency>

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

2,写接口

 import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Path;  /**  * Created by csonezp on 16-1-29.  */ public interface GreetingServicce {     @GET("/greeting/{name}")     Call<User> getGreeting(@Path("name") String name); } 

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

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

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

 import com.google.gson.Gson; import retrofit2.Call; import retrofit2.GsonConverterFactory; import retrofit2.Response; import retrofit2.Retrofit;  import java.io.IOException;  /**  * Created by csonezp on 16-1-29.  */ public class Test {     public static void main(String[] args) throws IOException {         Retrofit retrofit = new Retrofit.Builder().baseUrl("http://192.168.10.225:8080")                  .addConverterFactory(GsonConverterFactory.create(new Gson())).build();         GreetingServicce servicce = retrofit.create(GreetingServicce.class);         Call<User> call = servicce.getGreeting("ss");         Response<User> response = call.execute();         System.out.print(response.body().toString());     } } 

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

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

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

原文  http://www.cnblogs.com/csonezp/p/5168660.html
正文到此结束
Loading...