Fixed :
Выяснилось, что проблема заключалась в том, что я очищал ArrayList после передачи его в Задачу, поэтому к тому времени, когда он нашел время для его выполнения, там было нечего отправлять. Он работал в режиме отладки, потому что мог выполнить, прежде чем я позволю ему перейти к следующей строке. Извлеченный урок: не передавайте переменные, которые повторно используются для длительных задач :) Спасибо тем, кто ответил.
Я пытаюсь отправить данные о выборе пользователя на мой веб-сервер с помощью асинхронной задачи. Обычно пользователь делает выбор, и в AsyncTask отправляется строка из 3 или 4 команд. Когда я запускаю код, создается AsyncTask, но никогда не выполняется метод doInBackground. Еще более странным является то, что когда я работаю в режиме отладки и выполняю пошаговые инструкции по созданию задачи, она отлично работает.
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;
}
}
, который вызывается из потока пользовательского интерфейса с помощью следующего метода:
public void sendCommand(ArrayList<Command> commands){
new SendCommandTask().execute(commands);
}
Я смотрел на похожие темы, но они просто предлагают использовать другой метод, который я бы предпочел не делать, так как это, кажется, работает (в отладке :()