Android 2和Android 4

时间:2013-03-31 09:11:19

标签: android http httpclient

我遇到问题:在Android 2上,下面的代码工作正常,但在Android 4上无效...

try {
    HttpParams params = new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(params, 15000); 
    HttpClient client = new DefaultHttpClient(params);  
    String postURL = "http://web.lt/data.php";
    HttpPost post = new HttpPost(postURL);
    List<NameValuePair> paramss = new ArrayList<NameValuePair>();
    paramss.add(new BasicNameValuePair("X", "k"));
    paramss.add(new BasicNameValuePair("Y", "x"));
    paramss.add(new BasicNameValuePair("speed", "xyz"));
    UrlEncodedFormEntity ent = new UrlEncodedFormEntity(paramss,HTTP.UTF_8);
    post.setEntity(ent);
    HttpResponse responsePOST = client.execute(post);  
    HttpEntity resEntity = responsePOST.getEntity();

    if (resEntity != null) {    
        Log.i("RESPONSE",EntityUtils.toString(resEntity));
    }
} catch (Exception e) {
    e.printStackTrace();
}

我尝试下载https://code.google.com/p/httpclientandroidlib/并安装 右键单击项目 - &gt;属性 - &gt; Java构建路径 - &gt;图书馆 - &gt;添加外部JAR 但是当我改变时:

inport org.apache.http

import ch.boye.httpclientandroidlib.HttpEntity;

......应用程序崩溃。

2 个答案:

答案 0 :(得分:2)

您必须在Android 2及更高版本中允许的主UI线程上执行连接,但在蜂窝状和稍后停止。请参阅Android AsyncTask

答案 1 :(得分:1)

这是一个众所周知的问题。从AsyncTaskService拨打电话,而不是从UI线程执行。 UI线程上的网络调用将阻止UI并提供糟糕的用户体验。在以后的Android版本中抛出异常以避免这种情况。