如何在Android开发中用HttpClient连接网络数据
HttpClient网络访问
一、HttpClient网络访问:
(一)、简介:
1、Apache组织提供了HttpClient项目,可以实现网络访问。在Android中,成功集成了HttpClient,所以在Android中可以直接使用HttpClient访问网络。
2、与HttpURLConnection相比,HttpClient将前者中的输入、输出流操作,统一封装成HttpGet、HttpPost、HttpRequest类。
HttpClient:网络连接对象;
HttpGet:代表发送GET请求;
HttpPost:代表发送POST请求;
HttpResponse:代表处理服务器响应的对象。
HttpEntity对象:该对象中包含了服务器所有的返回内容。
3、使用步骤:(六部曲)重点
创建HttpClient对象:通过实例化DefaultHttpClient获得;
创建HttpGet或HttpPost对象:通过实例化 HttpGet或HttpPost 获得,而构造方法的参数是urlstring(即需要访问的网络url地址)。也可以通过调用setParams()方法来添加请求参数;
调用HttpClient对象的execute()方法,参数是刚才创建的 HttpGet或HttpPost对象 ,返回值是HttpResponse对象;
通过response对象中的getStatusLine()方法和getStatusCode()方法获取服务器响应状态是否是200。
调用 HttpResponse对象的getEntity()方法,返回HttpEntity对象。而该对象中包含了服务器所有的返回内容。
借助EntityUtils的toString()方法或toByteArray()对 HttpEntity对象进行处理,也可以通过IO流对 HttpEntity对象进行操作。
(二)、封装HttpClientHelper工具类:
public class HttpClientHelper {
public static HttpClient checkNetwork(String url) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse httpResponse = null;
try {
httpResponse = httpClientexecute(request);
if (httpResponsegetStatusLine()getStatusCode() == 200) {
return httpClient;
}
} catch (ClientProtocolException e) {
eprintStackTrace();
} catch (IOException e) {
eprintStackTrace();
}
return null;
}
/
作用:实现网络访问文件,将获取到数据储存在文件流中
@param url
:访问网络的url地址
@return inputstream
/
public static InputStream loadFileFromURL(String url) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet requestGet = new HttpGet(url);
HttpResponse httpResponse;
try {
httpResponse = httpClientexecute(requestGet);
if (httpResponsegetStatusLine()getStatusCode() == 200) {
HttpEntity entity = httpResponsegetEntity();
return entitygetContent();
}
} catch (Exception e) {
eprintStackTrace();
}
return null;
}
/
作用:实现网络访问文件,将获取到的数据存在字节数组中
@param url
:访问网络的url地址
@return byte[]
/
public static byte[] loadByteFromURL(String url) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet requestGet = new HttpGet(url);
try {
HttpResponse httpResponse = httpClientexecute(requestGet);
if (httpResponsegetStatusLine()getStatusCode() == 200) {
HttpEntity httpEntity = httpResponsegetEntity();
return EntityUtilstoByteArray(httpEntity);
}
} catch (Exception e) {
eprintStackTrace();
Systemoutprintln("====>" + etoString());
}
return null;
}
/
作用:实现网络访问文件,返回字符串
@param url
:访问网络的url地址
@return String
/
public static String loadTextFromURL(String url) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet requestGet = new HttpGet(url);
try {
HttpResponse httpResponse = httpClientexecute(requestGet);
if (httpResponsegetStatusLine()getStatusCode() == 200) {
HttpEntity httpEntity = httpResponsegetEntity();
return EntityUtilstoString(httpEntity, "utf-8");
}
} catch (Exception e) {
eprintStackTrace();
}
return null;
}
/
作用:实现网络访问文件,先给服务器通过“GET”方式提交数据,再返回相应的数据
@param url
:访问网络的url地址
@param params
String url:访问url时,需要传递给服务器的参数。
第二个参数格式为:username=wangxiangjun&password=123456
@return byte[]
/
public static byte[] doGetSubmit(String url, String params) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet requestGet = new HttpGet(url + "" + params);
try {
HttpResponse httpResponse = httpClientexecute(requestGet);
if (httpResponsegetStatusLine()getStatusCode() == 200) {
HttpEntity httpEntity = httpResponsegetEntity();
return EntityUtilstoByteArray(httpEntity);
}
} catch (Exception e) {
eprintStackTrace();
}
return null;
}
/
作用:实现网络访问文件,先给服务器通过“POST”方式提交数据,再返回相应的数据
@param url
:访问网络的url地址
@param params
String url:访问url时,需要传递给服务器的参数。 第二个参数为:List<NameValuePair>
@return byte[]
/
public static byte[] doPostSubmit(String url, List<NameValuePair> params) {
HttpClient httpClient = new DefaultHttpClient();
HttpPost requestPost = new HttpPost(url);
try {
requestPostsetEntity(new UrlEncodedFormEntity(params, "utf-8"));
HttpResponse httpResponse = httpClientexecute(requestPost);
if (httpResponsegetStatusLine()getStatusCode() == 200) {
HttpEntity httpEntity = httpResponsegetEntity();
return EntityUtilstoByteArray(httpEntity);
}
} catch (Exception e) {
eprintStackTrace();
}
return null;
}
/
作用:实现网络访问文件,先给服务器通过“POST”方式提交数据,再返回相应的数据
@param url
:访问网络的url地址
@param params
String url:访问url时,需要传递给服务器的参数。 Map<String , Object>
@return byte[]
/
public static byte[] doPostSubmit(String url, Map<String, Object> params) {
HttpClient httpClient = new DefaultHttpClient();
HttpPost requestPost = new HttpPost(url);
List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
try {
if (params != null) {
for (MapEntry<String, Object> entry : paramsentrySet()) {
String key = entrygetKey();
String value = entrygetValue()toString();
BasicNameValuePair nameValuePair = new BasicNameValuePair(
key, value);
parametersadd(nameValuePair);
}
}
requestPost
setEntity(new UrlEncodedFormEntity(parameters, "utf-8"));
HttpResponse httpResponse = httpClientexecute(requestPost);
if (httpResponsegetStatusLine()getStatusCode() == 200) {
HttpEntity httpEntity = httpResponsegetEntity();
return EntityUtilstoByteArray(httpEntity);
}
} catch (Exception e) {
eprintStackTrace();
}
return null;
}
}
1安装手机本地php+mysql服务器环境篇 :
11安装ksweb软件,安装好ksweb后,会在手机上生成一个文件夹htdocs,其目录是mnt/sdcard/htdocs,htdocs是网站的根目录。
12安装mysql 直接点击mysql管理,点击选择“是”然后解压便可自动安装。mysql的账号密码随后再改(在设置里面更改)。
13安装好MySQL之后,(如下图,打开phpmyadmin,表示安装成功!),另外,我们需要对ksweb进行一些设置方可更好使用。
131端口的更改步骤:(启用root→更改80端口)手机服务器启用root方法如下图,在ksweb设置里面把root打钩。
132开启手机80端口方法:把8080端口改为80端口,并把PHP服务,MySQL都打勾。其他一些设置比如MySQL密码,开机自启动等选项大家根据需要自行修改即可!
14ksweb全部设置好后,我们打开手机本地服务器地址localhost:80,表示设置好了。
我们点击页面中的“Enter KSWEB Web Interface”可以看到手机服务器的一些配置信息(默认账号密码都是“admin”)。表示手机服务搭建成功,一切正常!
2利用nat123软件进行内网80端口映射篇:
21注册账号,我们先到其官网注册账号官网,大家百度nat123即可,至于怎么注册我就不说了。
22登陆并添加域名解析,
221 应用名称,我填的是网络电视直播—在线看电视。假如你要搭建自己的博客,你可以填XX的博客,或者XX的个人博客等。
222 内网端口,只有root的手机才填80端口,所以这也是为什么一开始我说手机需要root!
223 内网地址这个默认localhost就行。
224 外网域名,我这里使用的是自己的域名(当使用自己的域名时,用cname解析,下面有当前唯一cname地址,我们在自己的域名解析里面填这个就行)。如果我们没有自己的域名,我们可以用官方免费的二级域名,注意他的格式)一切填好之后,点击确认保存即可!
23 我们下载并安装登陆安卓版的nat123,就自动解析了,
34 接下来我们在另一台电脑上输入刚才的域名访问 如下图所示,表示安卓手机web服务器安装成功,网站搭建成功!
首先你得知道 192168 是什么地址,这些地方在路由器上默认是被隔离的,就是不会有数据包穿过路由器到外网去。如果你是想测试程序,应该用 Wi-Fi 在局域网测试它。
当你手机用 GPRS 时是从移动运营商的网络到达你的测试服务器,因为 192168 是被隔离的,所以在互联网上是找不到 192168 这个地址的。
测试时应该使用 Wi-Fi 连接局域网测试。GPRS 和 3G 是没有办法使用的。
转载 本文介绍如何在安卓手机上搭建http服务器,有时候我们会有这要的需求,那就是想在自己的安卓手机上搭建一个简单的http服务里,有人是想用来玩一玩,有人是想做点研究,还有人有其他的目的,那么我们该怎么在安卓上搭建一个http服务器呢,下面安卓后院 为大家收集整理的一个方法,希望能够帮到大家。
一、准备篇
1将lmptarbz2移动到SD卡根目录(/mnt/sdcard/)
2安装安卓终端模拟器(TerminalEmulatorapk)
(注:lmptarbz2文件可以在本站的安卓工具箱页面下下载)
二、安装篇
1打开安卓终端模拟器
2执行以下命令(root)
$ su
# cd /
# mount -o remount,rw /system
# tar xf /mnt/sdcard/lmptarbz2
# mount -o remount,ro /system
# exit
$ exit
三、启动篇
1打开安卓终端模拟器
2执行以下命令(root)
$ su
# almp-startsh
# exit
$ exit
三、关闭篇
1打开安卓终端模拟器
2执行以下命令(root)
$ su
# almp-stopsh
# exit
$ exit
四、测试篇
1打开网络浏览器(OperaMobile)
2输入以下地址欣赏下您的almp环境吧
http://127001/
http://127001/fileadmin/
或者
http://localhost/
http://localhost/fileadmin/
部分浏览器不支持localhost的解析
五、mysql篇
1mysql用户名为root
2mysql默认密码为空
3mysql用以下地址访问
127001:3306
localhost:3306
4推荐phpmyadmin管理您的mysql数据库
5由于phpmyadmin更新频繁,请自己下载安装
6phpmyadmin默认不支持空密码登陆,请自己修改phpmyadmin的配置文件
7登陆phpmyadmin轻击修改密码为您的mysql超级用户root设置一个密码吧
六、注意篇
php-cgi由本人编译
1手机需要有root权限
2部分rom需要安装busybox
3部分rom需要在命令前面加上busybox
4本环境包中的部分资源来源于网络开源项目
5用Re挂载/system分区为读写可跳过mount命令
6执行终端命令时请忽略命令前的命令提示符$(#)
7本环境包理论上应该工作在Arm5++的安卓手机上
0条评论