为什么在Android上使用Async HTTP

时间:2011-05-11 15:35:17

标签: java android

我目前在我的应用中运行此功能。使用它是为了让用户向我发送简单的消息。打开一个对话框,然后当他们点击发送按钮时可以输入我希望打开另一个对话框说处理,最后打开一个说谢谢,如果成功的话。

使用asyncTask是唯一/最好的方法吗?在理解这个理论时,有没有一个很好的例子/演练实现这个,但不是真正的实现。

public void postData() {
    HttpParams params = new BasicHttpParams();
    params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
    HttpClient httpclient = new DefaultHttpClient(params);
    HttpPost httppost = new HttpPost("http://www.mysite.com/script.php");

    try {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("id", "12345"));
        nameValuePairs.add(new BasicNameValuePair("stringdata", messageval));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        HttpResponse response = httpclient.execute(httppost);
        responseBody = EntityUtils.toString(response.getEntity());
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
    } catch (IOException e) {
        // TODO Auto-generated catch block
    }    
} 

2 个答案:

答案 0 :(得分:2)

您绝对需要从UI线程运行网络代码。 AsyncTask是一种方便的方法,但如果您愿意,可以使用自己的线程方法。 AsyncTask没有什么神奇之处;这只是为了方便。

在任何一种情况下,如果您需要从网络线程与UI进行交互,您通常必须使用处理程序。

答案 1 :(得分:1)

如果您不希望在数据上传时您的UI线程“挂起”,那么:是的。 AsyncTask是创建新线程的最佳方式,因为它提供了方便的工具来发布进度并指示操作已完成。