gpt4 book ai didi

android - 如何在 Retrofit2 converter-simplexml 中调试 "java.lang.IllegalArgumentException: Unable to create converter for java.util.List"?

转载 作者:行者123 更新时间:2023-12-05 07:48:03 28 4
gpt4 key购买 nike

我正在使用 retrofit2 进行网络调用,并使用 retrofit2 converter-simplexml 作为解析 XML 的转换器。有新闻站点:http://www.cbc.ca/cmlink/rss-topstories/与 RSS 提要。无法修复错误。

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

示例代码:

休息管理器:

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;
}
}

服务:

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() {
}

方法:

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'

}

请告诉我问题是什么?

最佳答案

您的 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);

关于android - 如何在 Retrofit2 converter-simplexml 中调试 "java.lang.IllegalArgumentException: Unable to create converter for java.util.List"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38961892/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com