Android threads/callbacks

Android threads/callbacks

我正在尝试创建一个对象列表(在我的示例中为 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;
    }

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

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

您应该return一个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;
}