#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)