gpt4 book ai didi

java - Retrofit2: ClassCastException: java.util.ArrayList 无法转换为 retrofit2.Call

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:37:42 25 4
gpt4 key购买 nike

请帮助 Retrofit2。我是 Retrofit 的新手。我创建简单的服务器应用程序。应用管理Journals列表:在内存列表中添加Journal,通过id返回Journal。有一个 Journal.java:

public class Journal {
private AtomicInteger getNewId = new AtomicInteger(0);
@SerializedName("id")
@Expose
private Integer id;
@SerializedName("name")
@Expose
private String name;

public Journal(String name) {
this.id = getNewId.incrementAndGet();
this.name = name;}

public Integer getId() {return id;}
public String getName() {return name;}
}

有一个 Controller 接口(interface):

public interface JournalController {

@GET("journal")
Call<List<Journal>> getJournalList();

@GET("journal/{id}")
Call<Journal> getJournal(@Path("id") Integer id);

@POST("journal")
Call<Journal> addJournal(@Body Journal journal);
}

这是接口(interface)实现:

@Controller
public class JournalControllerImpl implements JournalController {
// An in-memory list that the controller uses to store the Journals
private List<Journal> journals = new ArrayList<>();

@RequestMapping(value= "journal", method=RequestMethod.GET)
public @ResponseBody Call<List<Journal>> getJournalList() {
return (Call<List<Journal>>) journals;}

@RequestMapping(value= "journal/{id}", method= RequestMethod.GET)
public @ResponseBody Call<Journal> getJournal(@Path("id") Integer id) {
Journal journal = journals.get(id);
return (Call<Journal>) journal;}

@RequestMapping(value= "journal", method= RequestMethod.POST)
public @ResponseBody Call<Journal> addJournal(@Body Journal journal) {
journals.add(journal);
return (Call<Journal> ) journal; }
}

应用程序成功启动。应用程序启动期间的控制台输出:

Mapped "{[/journal],methods=[GET]}" onto public retrofit2.Call> main.JournalControllerImpl.getJournalList()

Mapped "{[/journal],methods=[POST]}" onto public retrofit2.Call main.JournalControllerImpl.addJournal(main.Journal)

Mapped "{[/journal{/id}],methods=[GET]}" onto public retrofit2.Call main.JournalControllerImpl.getJournal(java.lang.Integer)

然后我尝试运行 URL http://localhost:8080/journal在浏览器上(或 GET HttpRequest http://localhost:8080/journal )。应用程序输出有错误:

“... java.lang.ClassCastException: java.util.ArrayList 无法转换为 retrofit2.Call...”

你能猜出哪里出了问题吗?将 java.util.ArrayList 转换为 Call 真的有问题吗? (我试过 CopyOnWriteArrayList 但这没有帮助。

提前谢谢你。

最佳答案

Call<T>是一个只需要存在于客户端的 Retrofit 类,它意味着对对外部 API 的潜在调用的抽象。

我不确定您为服务器使用的是哪种库,但您不能转换完全不相关的类。 (例如 ArrayList<T>Call<List<T>> )通常库会为你处理序列化,所以在服务器端你会直接返回你想要发送的对象:

@RequestMapping(value= "journal", method=RequestMethod.GET)
public @ResponseBody List<Journal> getJournalList() {
return journals;}

关于java - Retrofit2: ClassCastException: java.util.ArrayList 无法转换为 retrofit2.Call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38940610/

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