android - AsyncTask 从不执行 doInBackground(但在调试时执行)(更新 : Fixed)

标签 android android-asynctask

固定: 原来问题是我在将 ArrayList 传递给任务后清除了它,所以当它开始执行它时,没有任何东西可以发送。它在调试中工作,因为它可以在我让它进入下一行之前执行。经验教训:不要传入可重复用于长时间运行任务的变量 :) 感谢您的回答。

我正在尝试使用异步任务将用户选择数据发送到我的网络服务器。通常,用户将进行选择,然后将 3 或 4 个命令的字符串发送到 AsyncTask 以处理此操作。当我运行代码时,正在创建 AsyncTask,但从不执行 doInBackground 方法。更奇怪的是,当我在 Debug模式下运行并让它逐步完成任务创建时,它工作得很好。

private class SendCommandTask extends AsyncTask< ArrayList<Command>, Void, String>{

        protected String doInBackground(ArrayList<Command>... requests){
            conn = null;
            ArrayList<Command> values = requests[0];

            for( int i = 0; i < values.size(); i++){
                try {
                    url = new URL( siteRoot + values.get(i).getEndPoint() );
                    conn = (HttpsURLConnection) url.openConnection();
                    conn.setRequestProperty("Content-Type", "application/json");
                    conn.setRequestProperty("Cookie", authCookie);
                    conn.setReadTimeout(10000 /* milliseconds */);
                    conn.setConnectTimeout(15000 /* milliseconds */);
                    conn.setDoOutput(true);

                    OutputStreamWriter os = new OutputStreamWriter(conn.getOutputStream());
                    os.write(values.get(i).getJson().toString());
                    os.flush();                     
                }catch (IOException e) {
                    e.printStackTrace();
                }
                finally{
                    conn.disconnect();              
                }
            }
            return null;
        }
    }

通过以下方法从 UI 线程调用:

public void sendCommand(ArrayList<Command> commands){
        new SendCommandTask().execute(commands);
    }

我看过类似的线程,但他们只是建议使用不同的方法,我宁愿不这样做,因为这似乎有效(在调试中 :( )

最佳答案

如果它似乎没有执行,可能是在 doInBackground 中抛出异常,在这种情况下,LogCat 将从后台线程(可能类似于 siteRoot 为空?)

关于android - AsyncTask 从不执行 doInBackground(但在调试时执行)(更新 : Fixed),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8597088/

相关文章:

Android AsyncTask onPostExecute 方法

java - Recyclerview 和 Rest Api

android - 如何获取 Activity 中的服务对象?

Java/android 如何在延迟 3 秒后启动 AsyncTask?

java - Facebook Android SDK 需要 API 15 : Android 4. 0.3 或更高版本。我应该使用工具:override to force usage?

安卓|在 bundle 中使用 Parcelable 数据时解码未知类型

android - 如何从服务器删除已经上传的图片文件?

android - Android Studio 有类似xcode 的autolayout 的功能吗?

android - 从网络服务发送的视频图像

android - 无法从我的异步任务访问我的 ListView