2015-02-17 2 views
1

В принципе, я пытаюсь подключиться к веб-интерфейсу через приложение для Android.Android HttpUrlConnection не работает

Мне удалось успешно отправить команды в форму, используя HttpClient. Тем не менее, я хочу выполнить это, используя HttpUrlConnection, как рекомендовано здесь http://android-developers.blogspot.com/2011/09/androids-http-clients.html с целью обеспечения более быстрого и энергосберегающего соединения.

URL url = new URL("http://" + mIpAddress + ":" + mPort + "/command.html"); 
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
connection.setReadTimeout(10000); 
connection.setConnectTimeout(15000); 
connection.setRequestMethod("POST"); 
connection.setDoInput(true); 
connection.setDoOutput(true); 

OutputStream os = connection.getOutputStream(); 
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); 
writer.write(URLEncoder.encode("parameter=" + value, "UTF-8"); 
writer.flush(); 
writer.close(); 
os.close(); 

connection.connect(); 

Edit: Никакие исключения не бросают, так как код выполняется нормально, запрос просто, вероятно, не в ожидаемом формате сервер?

ответ

0

Не могли бы вы предоставить дополнительную информацию, например, Исключения или ответ сервера? Получает ли сервер ваш запрос?

Однако, я рекомендую вам использовать okhttp которое было построить на вершине HttpUrlConnection

+0

У меня нет каких-либо исключений и ответа, насколько я могу судить. Сервер/сайт НЕ ИМЕЕТ отправить обратно право ответа? Я пытаюсь избежать использования сторонних библиотек, так как мне нужен простой метод для подключения. Но если все остальное терпит неудачу, я рассмотрю использование okhttp, спасибо, что рассказали мне об этом! В любом случае, есть ли что-нибудь, что я могу сделать, чтобы предоставить лучшую информацию? Не знаю, что отлаживать, поскольку подключение к серверу кажется немного пробным и ошибочным процессом. – anonymousCoder

+0

Вы используете свой http-код в собственной теме или async-задаче? Поскольку андроид 4.0 android не позволит вам блокировать основной поток ui для длительных операций, таких как HTTP-вызовы. Обычно в этом случае будет выбрано исключение, но, возможно, это не делается на вашем тестовом устройстве по какой-то причине ... – sockeqwe

+0

Я правильно запускаю его в AsyncTask. В принципе, у меня есть два метода в этом классе. Один работает с использованием HttpClient (Apache, я думаю), а другой использует HttpUrlConnection. HttpClient работает нормально, поэтому нет проблем с потоком, однако HttpUrlConnection дает мне проблемы. Это мой первый раз, когда я использую сетевое взаимодействие в Java, поэтому, вероятно, я потерял что-то очень простое для вышеупомянутой реализации ... Я также попытался сравнить кодировку символов между HttpClient и HttpUrlConnection, но я не видел различий. – anonymousCoder

1

Вот что я использую для отправки запросов HTTP с помощью HttpURLConnection, обратите внимание, что connection.connect() правильно после установки HttpURLConnection не в конце, также setDoInput делает запрос POST вместо значения по умолчанию получить,

URL url = new URL(urlString); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    //conn.setReadTimeout(10000 /* milliseconds */); 
    // conn.setConnectTimeout(15000 /* milliseconds */); 
    //conn.setRequestMethod("GET"); 
    //conn.setDoInput(true); //* uses POST 
    // Starts the query 
    conn.connect(); 
    InputStream stream = conn.getInputStream(); 
    //String data = convertStreamToString(stream); 
    int sz = stream.available(); 
    byte[] b = new byte[sz]; 
    stream.read(b); 
    stream.close(); 
    String data = new String(b); 
+0

Я просто попытался подключиться раньше, в соответствии с вашим примером, однако сервер все еще не получает мою команду вообще или не получает ее должным образом. – anonymousCoder

+0

вы бы опубликовали то, что находится в вашем commad.html. Код, который я предоставил, используется в рабочем приложении, и он отлично работает при предоставлении действительного URL-адреса. – faljbour

1

connnection.getInputStream() требуется для POST для работы. Исправлена.

+0

Это дает мне исключение, FileNotFoundException –

0

Просто добавьте одну строку

connection.getRequestMethod(); 

и он будет работать.

Я не знаю почему, но это работает для меня после того, как я провел целый день на этом!

Смежные вопросы