无法为java.util.List Retrofit 2.0.0-beta2创build转换器

我只是做一个GET请求,但我得到这个错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.yomac_000.chargingpoint/com.example.yomac_000.chargingpoint.AllStores}: java.lang.IllegalArgumentException: Unable to create converter for java.util.List<model.Store> 

这是因为这一行代码:

 Call<List<Store>> call = subpriseAPI.listStores(response); 

所以我试着用这行代码来看看它是什么types的:

 System.out.println(subpriseAPI.listStores(response).getClass().toString()); 

但是,然后我得到同样的错误,所以它不让我知道它是什么types。 下面你可以看到我的代码。

StoreService.java:

 public class StoreService { public static final String BASE_URL = "http://getairport.com/subprise/"; Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .build(); SubpriseAPI subpriseAPI = retrofit.create(SubpriseAPI.class); String response = ""; public List<Store> getSubprises() { Call<List<Store>> call = subpriseAPI.listStores(response); try { List<Store> listStores = call.execute().body(); System.out.println("liststore "+ listStores.iterator().next()); return listStores; } catch (IOException e) { // handle errors } return null; } } 

SubpriseAPI.java:

 public interface SubpriseAPI { @GET("api/locations/get") Call<List<Store>> listStores(@Path("store") String store); } 

Store.java:

 public class Store { String name; } 

我正在使用Retrofit版本2.0.0-beta2。

Solutions Collecting From Web of "无法为java.util.List Retrofit 2.0.0-beta2创build转换器"

在2+版本中,您需要通知转换器

转换器

默认情况下,Retrofit只能将HTTP主体反序列化为OkHttp的ResponseBodytypes,并且只能接受其@Body的RequestBodytypes。

可以添加转换器来支持其他types。 为了您的方便,六个兄弟模块适应stream行的序列化库。

Gson:com.squareup.retrofit:converter-gson Jackson:com.squareup.retrofit:converter-jackson Moshi:com.squareup.retrofit:converter-moshi Protobuf:com.squareup.retrofit:converter-protobuf Wire:com.squareup。翻新:converter-wire简单的XML:com.squareup.retrofit:converter-simplexml

  //Square Lib, Consume Rest API compile 'com.squareup.retrofit:retrofit:2.0.0-beta1' compile 'com.squareup.okhttp:okhttp:2.4.0' compile 'com.squareup.retrofit:converter-gson:2.0.0-beta1' 

所以,

  String baseUrl = "" ; Retrofit client = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .build(); 
 public interface SubpriseAPI { @GET("api/locations/get") Call<List<Store>> listStores(@Path("store") String store); } 

你声明了一个名为store的@Path ,所以在你的@GET注解中,翻新期望findreplace的占位符。 例如

 @GET("api/locations/{store}") Call<List<Store>> listStores(@Path("store") String store);