Сбой HttpClient при выполнении метода

#android #http #httpclient #httprequest #httpresponse

#Android #http #httpclient #httprequest #httpresponse

Вопрос:

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

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

 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)
  

Комментарии:

1. Действительно ли URL-адрес существует ( http://somehost/WS2/Upload.aspx?one=valueGoesHere )? Попробуйте http://www.google.com , например, посмотреть, работает ли это.

2. Это фактический URL-адрес? Если URL-адрес действителен, и вы все еще сталкиваетесь с этой проблемой, вам следует прочитать о предварительной выборке DNS

3. ну, может быть, это так, но я не могу его получить, и он не работает с google.com ни то , ни другое

Ответ №1:

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

 StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
  

Комментарии:

1. Это решение сработало для меня, не могли бы вы объяснить это?

2. Это сработало и для меня. может кто-нибудь объяснить, почему это?

Ответ №2:

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

 <uses-permission android:name="android.permission.INTERNET"/>  
  

Ответ №3:

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

Ответ №4:

хорошо, как насчет того, чтобы попробовать это :

 URL uri = new URL(rootUri);
HttpURLConnection connection = (HttpURLConnection) uri.openConnection();
connection.setRequestMethod("GET");
connection.setDoInput(true);
connection.connect();
  

Ответ №5:

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

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

Комментарии:

1. ну, я подключен к Wi-Fi, и у меня есть подключение к Интернету, но только мое приложение не работает:(

Ответ №6:

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

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

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

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

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

Комментарии:

1. tnx, для фрагмента, но я не понимаю, как это может помочь с моей проблемой? потому что у меня есть исключение в этой строке client.execute(запрос) Я не знаю почему…

2. Фрагмент на самом деле не очень поможет, вам нужно реализовать механизм повторных попыток. Игнорируйте исключение, запустите свой код в цикле while, пока не получите ответ HTTP a 200.

Ответ №7:

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

 java.net.UnknownHostException: somehost
  

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

amp; КСТАТИ www.google.com работает нормально

Комментарии:

1. В моем случае это не так, и я не знаю почему… W / System.err(4545): java.net . Исключение UnknownHostException: www.google.com W/System.ошибка (4545): при java.net . InetAddress. lookupHostByName(InetAddress.java:512) W /System.err( 4545): в java.net . InetAddress.getAllByNameImpl(InetAddress.java:300) W / System.err( 4545): при java.net . InetAddress.getAllByName(InetAddress.java:259)