Сбой HttpClient при выполнении метода - PullRequest
1 голос
/ 03 ноября 2011

Должно быть, я что-то идиотское делаю, но не могу понять, в чем проблема ...

Мой фрагмент кода

try {
    HttpClient client = new DefaultHttpClient();
    HttpGet request = new HttpGet("http://somehost/WS2/Upload.aspx?one=valueGoesHere");
    client.execute(request);//it fails at this line
} catch (Exception e) {

и в моем манифесте у меня есть разрешение на доступ в интернет

с консоли

W/System.err( 4210): java.net.UnknownHostException: somehost
W/System.err( 4210):    at java.net.InetAddress.lookupHostByName(InetAddress.java:513)
W/System.err( 4210):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:278)
W/System.err( 4210):    at java.net.InetAddress.getAllByName(InetAddress.java:242)
W/System.err( 4210):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136)
W/System.err( 4210):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
W/System.err( 4210):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
W/System.err( 4210):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348)
W/System.err( 4210):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
W/System.err( 4210):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
W/System.err( 4210):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
W/System.err( 4210):    at com.temp.services.httpclient.HttpGetDemo.onCreate(HttpGetDemo.java:29)
W/System.err( 4210):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069)
W/System.err( 4210):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751)
W/System.err( 4210):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803)
W/System.err( 4210):    at android.app.ActivityThread.access$2300(ActivityThread.java:135)
W/System.err( 4210):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136)
W/System.err( 4210):    at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err( 4210):    at android.os.Looper.loop(Looper.java:144)
W/System.err( 4210):    at android.app.ActivityThread.main(ActivityThread.java:4937)
W/System.err( 4210):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 4210):    at java.lang.reflect.Method.invoke(Method.java:521)
W/System.err( 4210):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
W/System.err( 4210):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
W/System.err( 4210):    at dalvik.system.NativeStart.main(Native Method)
I/ActivityManager(  120): Displayed activity com.temp.services/.httpclient.HttpGetDemo: 119 ms (total 304 ms)

Ответы [ 7 ]

4 голосов
/ 01 марта 2014

Попробуйте добавить следующее перед вашим http-кодом запроса

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
1 голос
/ 29 марта 2013

Вы должны убедиться, что вы не работаете в основном потоке, проверьте, если вы получаете это исключение: android.os.NetworkOnMainThreadException

1 голос
/ 06 июня 2012

Не забудьте объявить разрешение ИНТЕРНЕТ в манифесте Android:

<uses-permission android:name="android.permission.INTERNET"/>  
0 голосов
/ 03 ноября 2011

хорошо, как насчет этого:

URL uri = new URL(rootUri);
HttpURLConnection connection = (HttpURLConnection) uri.openConnection();
connection.setRequestMethod("GET");
connection.setDoInput(true);
connection.connect();
0 голосов
/ 03 ноября 2011

Проблема с URL. Как показано в журнале, исключение составляет

java.net.UnknownHostException: somehost

Попробуйте указать свой истинный URL.

& BTW www.google.com отлично работает

0 голосов
/ 03 ноября 2011

Предполагая, что URL является действительным, я предлагаю вам позвонить:

try {
    InetAddress address = InetAddress.getByName(url);

    } catch (UnknownHostException e) {
        e.printStackTrace();
    }

Это Предварительная выборка DNS , чтобы ваше устройство могло разрешить его URl вАйпи адрес.

Хотя этого недостаточно для гарантии работы.Что на самом деле сработало для меня, так это механизм повторных попыток.Дайте ему немного старого доброго F5 F5 F5 F5, пока сайт не ответит: D

0 голосов
/ 03 ноября 2011

Вы выполняете этот запрос в эмуляторе или на устройстве Android?если он на эмуляторе, возможно, интернет-соединение с ним не используется.

Если это на устройстве Android, кажется, у вас нет доступа к интернету (нет разрешения, только доступ)

...