博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android学习笔记:利用httpclient和AsyncTask 发起网络http post操作
阅读量:5158 次
发布时间:2019-06-13

本文共 2847 字,大约阅读时间需要 9 分钟。

1、在android4中,发起网络http操作,不能在Activity的事件(即主线程)中进行,必须在单独的线程中操作。

另外进行网络操作,需要在manifest文件中增加如下的权限:

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

2、下面给出代码事例

public void loadData() {		new AsyncTask
() { @Override protected String doInBackground(String... paramsInput) { String url = "http://10.0.0.5:8080/examples/action"; List
params = new ArrayList
(); 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下。

 

转载于:https://www.cnblogs.com/51kata/p/4133847.html

你可能感兴趣的文章
Real-Time Rendering 笔记
查看>>
实验四2
查看>>
多路复用
查看>>
javascript 无限分类
查看>>
spring IOC装配Bean(注解方式)
查看>>
[面试算法题]有序列表删除节点-leetcode学习之旅(4)
查看>>
kubernetes_book
查看>>
侧边栏广告和回到顶部
查看>>
https://blog.csdn.net/u012106306/article/details/80760744
查看>>
海上孤独的帆
查看>>
处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“Manag
查看>>
01: socket模块
查看>>
mysql触发器
查看>>
淌淌淌
查看>>
win10每次开机都显示“你的硬件设置已更改,请重启电脑……”的解决办法
查看>>
C++有关 const & 内敛 & 友元&静态成员那些事
查看>>
函数积累
查看>>
Swift 入门之简单语法(六)
查看>>
〖Python〗-- IO多路复用
查看>>
栈(括号匹配)
查看>>