Reputation: 33
I am using retrofit2 for networking calls and retrofit2 converter-simplexml as a converter to parse XML. There news site: http://www.cbc.ca/cmlink/rss-topstories/ with the RSS feed. Can't fix the error.
java.lang.IllegalArgumentException: Unable to create converter for java.util.List<com.ku4irka.rss_nfr.model.entity.Channel>
for method ChannelService.getChannel
at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:720)
at retrofit2.ServiceMethod$Builder.createResponseConverter(ServiceMethod.java:706)
at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:167)
at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:166)
at retrofit2.Retrofit$1.invoke(Retrofit.java:145)
at java.lang.reflect.Proxy.invoke(Proxy.java:397)
at $Proxy0.getChannel(Unknown Source)
at com.ku4irka.rss_nfr.view.activity.ListNewsActivity.configRest(ListNewsActivity.java:48)
at com.ku4irka.rss_nfr.view.activity.ListNewsActivity.onCreate(ListNewsActivity.java:36)
at android.app.Activity.performCreate(Activity.java:5958)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
... 10 more
Caused by: java.lang.IllegalArgumentException: Could not locate ResponseBody converter for java.util.List<com.ku4irka.rss_nfr.model.entity.Channel>.
Tried:
* retrofit2.BuiltInConverters
* retrofit2.converter.simplexml.SimpleXmlConverterFactory
at retrofit2.Retrofit.nextResponseBodyConverter(Retrofit.java:346)
at retrofit2.Retrofit.responseBodyConverter(Retrofit.java:308)
at retrofit2.ServiceMethod$Builder.createResponseConverter(ServiceMethod.java:704)
... 20 more
Example code:
RestManager:
public class RestManager {
private static final OkHttpClient CLIENT = new OkHttpClient();
private static Retrofit retrofit;
private static ChannelService sChannelService;
private static void retrofitSetup() {
// Retrofit setup
retrofit = new Retrofit.Builder()
.baseUrl(Constans.HTTP.BASE_URL)
.addConverterFactory(SimpleXmlConverterFactory.create())
.client(CLIENT)
.build();
}
public static ChannelService getChannelService() {
if (sChannelService == null) {
retrofitSetup();
// Service setup
sChannelService = retrofit.create(ChannelService.class);
}
return sChannelService;
}
}
Service:
public interface ChannelService {
@GET("cmlink/rss-topstories/")
Call<List<Channel>> getChannel();
}
Class Channel:
@Root(name = "channel")
public class Channel {
@Element(name = "guid")
private double id;
@Element(name = "title")
private String title;
@Element(name = "pubDate")
private String pubDate;
@Element(name = "author")
private String author;
@Element(name = "description")
private String description;
@Element(name = "link")
private String link;
public Channel() {
}
Method:
private void configRest() {
Call<List<Channel>> call = mRestManager.getChannelService().getChannel();
call.enqueue(new Callback<List<Channel>>() {
@Override
public void onResponse(Call<List<Channel>> call, Response<List<Channel>> response) {
if (response.isSuccessful()) {
mNewsList = response.body();
setRecyclerView();
}
}
@Override
public void onFailure(Call<List<Channel>> call, Throwable t) {
//
}
});
}
Gradle:
configurations {
compile.exclude group: 'stax'
compile.exclude group: 'xpp3'
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.1.1'
compile 'com.android.support:design:24.1.1'
compile 'com.android.support:recyclerview-v7:24.1.1'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-simplexml:2.1.0'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.squareup.okhttp3:okhttp:3.3.1'
compile 'org.simpleframework:simple-xml:2.7.1'
}
Please tell me what is the problem?
Upvotes: 3
Views: 2431
Reputation: 3430
You are probably using wrong version of converter with your version of Retrofit
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.okhttp3:okhttp:3.4.0'
compile ('com.squareup.retrofit2:converter-simplexml:2.1.0', {
exclude module: 'stax'
exclude module: 'stax-api'
exclude module: 'xpp3'
})
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(HOST)
.client(client)
.addConverterFactory(SimpleXmlConverterFactory.create())
.build();
service = retrofit.create(Service.class);
Upvotes: 0