Android 中的多线程 - 为什么我的 onCompleted 回调没有被调用?
Multithreading in Android - why doesn't my onCompleted callback get called?
所以我正在尝试向我的应用程序添加多线程,但我 运行 遇到了一个奇怪的问题。我创建了一个新的 运行nable 来处理所有数据的解析,以便应用程序在解析时不会冻结,然后创建一个 运行 的新线程 运行nable。但是,当线程启动并调用 运行() 时,我注意到它从不调用 onCompleted()。这对我来说很奇怪,因为如果我从 运行() 部分中取出那个确切的代码块,它就可以完美地工作。
谁能告诉我我做错了什么?我对 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();
我在 运行() 和 "new Request" 处设置了一个断点,它总是被命中,但是当我为 onCompleted() 设置断点时,这些断点永远不会到达。
当您到达
的末尾时,您的线程将结束
public void run ()
我假设您没有收到回调,因为您的线程在您调用 executeAsync 后已经完成(它将在单独的线程上执行)。完全删除您的线程可能会解决您的问题。
所以我正在尝试向我的应用程序添加多线程,但我 运行 遇到了一个奇怪的问题。我创建了一个新的 运行nable 来处理所有数据的解析,以便应用程序在解析时不会冻结,然后创建一个 运行 的新线程 运行nable。但是,当线程启动并调用 运行() 时,我注意到它从不调用 onCompleted()。这对我来说很奇怪,因为如果我从 运行() 部分中取出那个确切的代码块,它就可以完美地工作。
谁能告诉我我做错了什么?我对 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();
我在 运行() 和 "new Request" 处设置了一个断点,它总是被命中,但是当我为 onCompleted() 设置断点时,这些断点永远不会到达。
当您到达
的末尾时,您的线程将结束public void run ()
我假设您没有收到回调,因为您的线程在您调用 executeAsync 后已经完成(它将在单独的线程上执行)。完全删除您的线程可能会解决您的问题。