gpt4 book ai didi

安卓线程/回调

转载 作者:行者123 更新时间:2023-11-29 20:55:59 30 4
gpt4 key购买 nike

我正在尝试创建一个对象列表(在我的示例中为 List<Card>),我在其中使用 json 将对象添加到此列表,但该列表仍为空。这是我的代码:

public List<Card> readCardsFromJson() {
final List<Card> cards = new ArrayList<Card>();

Thread thread = new Thread(new Runnable() {
@Override
public void run() {
HttpReader httpReader = new HttpReader();
httpReader.setOnResultReadyListener(new HttpReader.OnResultReadyListener() {
@Override
public void resultReady(String result) {
//Add Card objects to the List<Card>
}
}
});
httpReader.execute("http://eduphp.khk.be/~r0370877/EnkelExpert.json");
}
});
thread.start();

return cards;
}

问题是我返回的列表是空的。我很确定这是一个问题,因为我在这里使用的线程。我认为返回发生在线程实际完成之前,但我该怎么做才能解决这个问题?

我似乎无法解决这个问题。任何帮助将不胜感激。

最佳答案

你应该返回一个 Future<List<Card>>这是非阻塞的,允许您在处理 HTTP 请求时继续计算:

ExecutorService es = Executors.newSingleThreadExecutor();
Future<List<Card>> futureCards = es.submit(new Callable<List<Card>>() {
@Override
public List<Card> call() {
return readCards();
}
});
// do some other work ...
// ... and at some point need the List<Card>
List<Card> cards = futureCards.get(); // blocks until the future is completed

和阻塞readCards方法:

private List<Card> readCards() {
final List<Card> cards = new ArrayList<Card>();
HttpReader hr = new HttpReader();
hr.setOnResultReadyListener(new HttpReader.OnResultReadyListener() {
@Override
public void resultReady(String result) {
//Add Card objects to the List<Card>
}
});
hr.execute("http://eduphp.khk.be/~r0370877/EnkelExpert.json");
return cards;
}

关于安卓线程/回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27743864/

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