Хорошо бы начать с статьи Sun Microsystems , на которую ссылается SB. Однако я определенно не назвал бы это предпочтительным способом. Сначала он излишне выдает исключение, затем он окончательно не закрывает потоки. Кроме того, он использует метод url.openStream , с которым я не согласен, поскольку он все равно может получать выходные данные, даже если возвращается ошибка HTTP .
Вместо url.openStream
пишем:
HttpURLConnection conn=(HttpURLConnection) url.openConnection()
//Any response code starting with 2 is acceptable
if(!String.valueOf(conn.getResponseCode()).startsWith('2'))
//Provide a nice useful exception
throw new IOException("Incorrect response code "+conn.getResponseCode()+" Message: " +getResponseMessage());
InputStream rawIn=conn.getInputStream()
OutputStream rawOut=conn.getOutputStream()
//You may want to add buffering to reduce the number of packets sent
BufferedInputStream bufIn=new BufferedInputStream(rawIn);
BufferedOutputStream bufOut=new BufferedInputStream(rawOut);
НЕ ИСПОЛЬЗУЙТЕ ЭТОТ КОД БЕЗ ОБРАБОТКИ ИСКЛЮЧЕНИЙ ИЛИ ЗАКРЫТИЯ ПОТОКОВ! . Это на самом деле довольно сложно сделать правильно. Если вы хотите узнать, как это сделать правильно, посмотрите мой ответ на гораздо более конкретный вопрос выборки изображений в Android , поскольку я не хочу переписывать все это здесь ,
Теперь при получении ввода с сервера, если вы не пишете инструмент командной строки, вы захотите запустить его в отдельном потоке и отобразить диалог загрузки. Ответ Сгармана демонстрирует это с использованием основных потоков Java, а мой ответ на этот вопрос с использованием класса AsyncTask из Android, чтобы сделать его более аккуратным. Файл класса не имеет зависимостей Android, и лицензия Apache, поэтому вы можете использовать его в проектах, отличных от Android.