Android学习笔记:利用httpclient和AsyncTask 发起网络http post操作
1、在android4中,发起网络http操作,不能在Activity的事件(即主线程)中进行,必须在单独的线程中操作。
另外进行网络操作,需要在manifest文件中增加如下的权限:
<uses-permission android:name="android.permission.INTERNET" />
2、下面给出代码事例
public void loadData() {
new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... paramsInput) {
String url = "http://10.0.0.5:8080/examples/action";
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("type", paramsInput[0]));
params.add(new BasicNameValuePair("id", paramsInput[1]));
/* 建立HTTPPost对象 */
HttpPost httpRequest = new HttpPost(url);
String strResult = "doPostError";
try {
HttpClient httpClient = getHttpClient();
/* 添加请求参数到请求对象 */
httpRequest.setEntity(new UrlEncodedFormEntity(params,
HTTP.UTF_8));
/* 发送请求并等待响应 */
HttpResponse httpResponse = httpClient.execute(httpRequest);
/* 若状态码为200 ok */
if (httpResponse.getStatusLine().getStatusCode() == 200) {
/* 读返回数据 */
strResult = EntityUtils.toString(httpResponse
.getEntity());
} else {
strResult = "Error Response: "
+ httpResponse.getStatusLine().toString();
}
} catch (ClientProtocolException e) {
strResult = "Error Response: " + e.getMessage().toString();
e.printStackTrace();
} catch (IOException e) {
strResult = "Error Response: " + e.getMessage().toString();
e.printStackTrace();
} catch (Exception e) {
strResult = "Error Response: " + e.getMessage().toString();
e.printStackTrace();
}
return strResult;
}
@Override
protected void onPostExecute(String result) {
TextView view = (TextView) findViewById(R.id.resultText);
view.setText(result);
super.onPostExecute(result);
}
}.execute("query","1");
}
private HttpClient getHttpClient() {
// 创建 HttpParams 以用来设置 HTTP 参数(这一部分不是必需的)
HttpParams httpParams = new BasicHttpParams();
// 设置连接超时和 Socket 超时,以及 Socket 缓存大小
HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000);
HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000);
HttpConnectionParams.setSocketBufferSize(httpParams, 8192);
// 设置重定向,缺省为 true
HttpClientParams.setRedirecting(httpParams, true);
// 设置 user agent
String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2) Gecko/20100115 Firefox/3.6";
HttpProtocolParams.setUserAgent(httpParams, userAgent);
// 创建一个 HttpClient 实例
// 注意 HttpClient httpClient = new HttpClient(); 是Commons HttpClient
// 中的用法,在 Android 1.5 中我们需要使用 Apache 的缺省实现 DefaultHttpClient
HttpClient httpClient = new DefaultHttpClient(httpParams);
return httpClient;
}
上述代码的loadData方法中,创建一个AsyncTask对象,在对象的doInBackground方法中发起网络操作,获取到操作结果。然后在onPostExecute方法中,利用前面获取到的结果更新界面。
这里的网络操作主要是利用了HttpClient等相关api,位于org.apache.http.client.HttpClient下。
Android学习笔记:利用httpclient和AsyncTask 发起网络http post操作的更多相关文章
- Android学习笔记之HttpClient实现Http请求....
PS:最近光忙着考试了....破组成原理都看吐了....搞的什么也不想干...写篇博客爽爽吧....貌似明天就考试了...sad... 学习笔记: 1.如何实现Http请求来实现通信.... 2.解决 ...
- Android学习笔记:多个AsyncTask实例的并发问题
AsyncTask是Android给开发者提供的一个简单轻量级的多线程类,通过它我们可以很容易新建一个线程让在后台做一些耗时的操作(如IO操作.网络访问等),并在这个过程中更新UI.之所以说它轻量级, ...
- 【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
原文网址:http://cherishlc.iteye.com/blog/1756762 在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在And ...
- Android学习笔记————利用JDBC连接服务器数据库
/******************************************************************************************** * auth ...
- android学习笔记——利用BaseAdapter生成40个列表项
RT: main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...
- .net学习笔记----利用System.Drawing.Image类进行图片相关操作
C#中对图片的操作主要是通过System.Drawing.Image等类进行. 一.将图片转换为字节流 /// <summary> /// 图片处理帮助类 /// </summary ...
- 【转】 Pro Android学习笔记(七四):HTTP服务(8):使用后台线程AsyncTask
目录(?)[-] 5秒超时异常 AsyncTask 实现AsyncTask抽象类 对AsyncTask的调用 在哪里运行 其他重要method 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注 ...
- 【转】 Pro Android学习笔记(九二):AsyncTask(1):AsyncTask类
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在Handler的学习系列中,学习了如何h ...
- 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET
目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...
随机推荐
- Android _优雅实现元素间的分割线 (支持3.0以下)
转:http://blog.csdn.net/lmj623565791/article/details/42407923 1.概述 话说,随着Android SDK版本的升级,很多控件增加了新的属性方 ...
- 在github搭建你的个人主页
一. 有没有遇到过在简历上要求写项目地址的经历.或者面试时面试官问你的项目在线地址是多少. 二. github 不但有代码托管的功能,还可以搭建在线演示项目,对于一个没有多少私房钱的穷屌丝,这个是不是 ...
- 远程连接mysql数据慢的问题
由于公司没有服务器,买的阿里云的服务器用于开发,所以就在本地连接服务器的mysql. 连接很慢,打开表也很慢,一开始没多想,以为是网络慢而已. 最近,开发经常要使用navicat连接数据库,实在是太慢 ...
- c语言字符串翻转系列
2013-10-25 最近碰到一道笔试题,是关于字符串翻转的.题目是:将一段英文翻转,但保留单词拼写,如给定字符串str="I am a student",返回为"stu ...
- MYSQL 二进制还原
解决方法: mysqlbinlog bin_log_file_path_and_name | mysql -uroot -p 如: mysqlbinlog E:\DB\mysql_log\mysql_ ...
- jQuery插入节点的方法
注:摘自<锋利的jQuery(第二版)> append() 向每个匹配的元素内部追加内容: HTML代码:<p>我想说:</p>jQuery代码:$(" ...
- Delphi代码中嵌入ASM代码
前言 Delphi作为一个快速高效的开发平台,使用的人越来越多,但熟悉在Delphi代码中嵌入ASM代码的程序员我想不多,因为这方面的资料太少了,另一方面,它还需要有基本的汇编语言知识,关於汇编语言的 ...
- Web API核查表:设计、测试、发布API时需思考的43件事[转]
Web API核查表:设计.测试.发布API时需思考的43件事 当设计.测试或发布一个新的Web API时,你是在一个原有的复杂系统上构建新的系统.那么至少,你也要建立在HTTP上,而HTTP则是 ...
- SQL SERVER 中 实现主表1行记录,子表多行记录 整合成一条虚拟列
表中有这样的记录,简单的主子表,现要想通过left join 语句把两表关联起来 select * from tbl_diary_reback a left join tbl_diary_reback ...
- Sql Server 服务器名称\实例名称 无法连接 Server Name\Instance Name
解决步骤: 1: Sql Server是否已经启动. 2: 检查Sql Server服务器是否开启TCP/IP协议. 侦听的默认端口为1433 3: ping 数据库 ...