соединение отклонено при попытке подключиться к моему серверу REST из эмулятора Android

рассмотрите следующий код Android и, пожалуйста, решите мою проблему: на моем ноутбуке работает REST-сервер ... я могу получить доступ к этому серверу из моего браузера и получить правильные результаты ... но теперь я хочу использовать его из моего эмулятора Android, который также работает на моем ноутбуке, используя следующий код ..

 // String URL = "http://localhost:8080/server/rest/user/1";
 String URL = "http://www.google.com";

HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet(URL);
HttpResponse result = httpclient.execute(request);

в эмуляторе, когда я передаю URL как http://www.google.com, в результате я получил правильный ответ, но когда я использую свой URL-адрес localhost (прокомментированный выше), мне было отказано в соединении ....

WARN/System.err(901): org.apache.http.conn.HttpHostConnectException: Connection to http://localhost:8080 refused
WARN/System.err(901): Caused by: java.net.ConnectException: /127.0.0.1:8080 - Connection refused

если я запускаю тот же URL-адрес в своем браузере, он работает. вы можете сказать мне, почему URL-адрес localhost не работает в эмуляторе ..?


person Ankur    schedule 01.07.2011    source источник
comment
к локальному (машинному) хосту в Android Emulator можно получить доступ по IP 10.0.2.2   -  person Adil Soomro    schedule 01.07.2011
comment
Адиль Я уже пробовал, но это тоже не сработало ... пожалуйста, помогите мне.   -  person Ankur    schedule 01.07.2011
comment
Вы читали эти темы это, это и это   -  person Adil Soomro    schedule 01.07.2011
comment
спасибо, Адил, за эти ссылки, но все 3 ссылки предлагают заменить localhost на 10.0.2.2, что я уже пробовал и теперь получил эту ошибку java.net.SocketException: Семейство адресов не поддерживается протоколом   -  person Ankur    schedule 01.07.2011
comment
Если вы все еще сталкиваетесь с проблемой, попробуйте эту одну попытку.   -  person Omar Khaium Chowdhury    schedule 10.04.2021


Ответы (3)


Анкур, у меня была та же проблема, но замена localhost на 10.0.2.2 сработала для меня. Также убедитесь, что вы добавили строку ‹uses-permission android: name =" android.permission.INTERNET "/›

в теге ‹manifest› в файле AndroidManifest.xml.

Спасибо Адилю и Роджерстоуну за ваши ответы.

-Аджмал

person MohammadAjmal    schedule 24.07.2011
comment
Адил, разрешение Android для Интернета уже было в манифесте ... потому что тогда только я получил ответ для google.com .. - person Ankur; 26.07.2011
comment
также обратите внимание на stackoverflow.com/questions/11614295/ - person Junior Mayhé; 11.03.2014
comment
Я в растерянности. Я могу заставить это работать с моего Android-телевизора, но не с помощью эмулятора Android-телевизора. Мой локальный сервер - это узел .... Есть предложения? - person Sealer_05; 07.02.2016

Замените свой URL на http://10.0.2.2:8080/server/rest/user/1. Это должно сработать.

person rogerstone    schedule 01.07.2011
comment
Это не сработало, даже когда я попытался заменить localhost на следующий IP-адрес 10.0.2.2 (как было предложено здесь). Я также пытался получить к нему доступ по своему абсолютному IP-адресу моего ноутбука (192.168.1.3), но безуспешно. Однако в этом случае даже мой браузер не ответил мне. - person Ankur; 01.07.2011

Убедитесь, что вы не используете соединение в основном потоке.

person albertoj    schedule 22.08.2013
comment
Если хотите, вы можете улучшить свой ответ, немного уточнив. Как можно убедиться, что соединение не запускается в основном потоке? Каковы будут последствия, если он это сделает? Как это исправить в коде? - person Bex; 22.08.2013