所以我试图在我的应用中添加多线程,而且我遇到了一个奇怪的问题。我创建了一个新的runnable来处理解析所有数据,以便应用程序在执行此操作时不会冻结,然后创建一个新线程来运行该runnable。但是,当线程启动并且run()被调用时,我注意到它从不调用onCompleted()。这对我来说很奇怪,因为如果我从run()部分中取出那个确切的代码块,它就可以完美地运行。
有谁能让我知道我做错了什么?我对Java中的多线程有点新意,所以我真的很感激。
Runnable parseRunnable = new Runnable(){
@Override
public void run(){
new Request(session, id + "/comments", null, HttpMethod.GET, new Request.Callback() {
@Override
public void onCompleted(Response response) {
try {
JSONArray msgs = response.getGraphObject().getInnerJSONObject().getJSONArray("data");
populateData(msgs);
} catch (JSONException e) {
e.printStackTrace();
}
Request next = response.getRequestForPagedResults(Response.PagingDirection.NEXT);
retrieveMsgs(next);
}
}).executeAsync();
}
};
Thread parseThread = new Thread(parseRunnable);
parseThread.start();
我在run()和" new Request"设置断点。总是被击中,但是当我为onCompleted()设置断点时,永远不会达到它们。
答案 0 :(得分:1)
当你到达 p>结尾时,你的线程将会完成
public void run ()
我将假设你没有得到你的回调因为你的线程已经完成,因为你调用了executeAsync(它将在一个单独的线程上执行)。完全删除你的线程可能会解决你的问题。