【问题标题】:Multithreading in Android - why doesn't my onCompleted callback get called?Android 中的多线程 - 为什么我的 onCompleted 回调没有被调用?
【发布时间】:2015-07-19 21:17:31
【问题描述】:

所以我正在尝试将多线程添加到我的应用程序中,但遇到了一个奇怪的问题。我创建了一个新的 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() 设置断点时,这些断点永远不会到达。

【问题讨论】:

    标签: java android multithreading callback facebook-android-sdk


    【解决方案1】:

    当你到达结尾时,你的线程将结束

    public void run ()
    

    我假设您没有收到回调,因为您的线程已经完成,因为您调用了 executeAsync(它将在单独的线程上执行)。完全删除您的主题可能会解决您的问题。

    【讨论】:

    • 啊哇,有道理 - 我在我的应用程序中遇到了一些冻结问题,您的评论表明我在错误的地方寻找它。谢谢。
    • 好的,如果这个旅游问题解决了记得投票并接受答案。
    猜你喜欢
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 2020-11-21
    • 2022-07-03
    • 2012-01-30
    • 2020-04-26
    • 2018-07-11
    • 1970-01-01
    相关资源
    最近更新 更多