HttpClient在execute方法失败

时间:2011-11-03 11:02:31

标签: 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)

7 个答案:

答案 0 :(得分:4)

尝试在http请求代码

之前添加以下内容
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

答案 1 :(得分:1)

不要忘记在 Android清单中声明 INTERNET权限

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

答案 2 :(得分:1)

你应该确保你的主线程没有运行,检查你是否得到这个例外: android.os.NetworkOnMainThreadException

答案 3 :(得分:0)

您是在模拟器中还是在Android设备上执行此请求? 如果它在模拟器上,可能没有与它共享互联网连接。

如果它在Android设备上,似乎你没有互联网访问权限(不是权限,只是访问权限)

答案 4 :(得分:0)

假设网址是有效网址,我建议您致电:

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

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

这是DNS pre-fetching,以便您的设备可以将其解析为IP地址。

虽然这还不足以保证工作。实际上对我有用的是重试机制。给它一些好的老款F5 F5 F5 F5,直到网站回复:D

答案 5 :(得分:0)

问题在于URL。如日志异常中所示

java.net.UnknownHostException: somehost

尝试使用您的真实网址。

&安培; BTW www.google.com正常运作

答案 6 :(得分:0)

好的,尝试这个怎么样:

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