Android之Http网络编程(二)
上一篇文章简单的介绍了Android中http的两种通信方式,并且分别用获取百度网页做了实例。但是在实际应用中,更多的是客户端通过请求的参数来实现在服务端的具体操作,并最终返回数据给客户端。因为我们不可能对客户端的每一个需要网络请求的操作都单独的设置一个不变的网络地址。
(因为我是从.net转过来的还没真正学过java web,所以web方面的代码比较简单,大家见谅。)
下面我们来做一个简单的小例子:(简单的用户登录)
这里我们会使用到tomcat,以及Genimotion获取本地IP的方法。对此完全不熟悉的童鞋请看另一篇博客《Android中Tomcat的简单配置和使用》。
首先我们需要完成一个服务器端的代码:
<%@ page contentType="text/html; charset=GBK" language="java"%>
<%
String param;
param = request.getParameter("param");
if (!"".equals(param)||param!=null) {
if("get".equals(param)){
out.println("发送GET请求成功");
}else if("post".equals(param)){
String content=request.getParameter("content");
String nickname=request.getParameter("nickname");
if(content!=null&&nickname!=null){
nickname=new String(nickname.getBytes("iso-8859-1"),"utf-8");
content=new String(content.getBytes("iso-8859-1"),"utf-8");
if(nickname.equals("admin")&&content.equals("123456")){
out.println("登陆成功!");
}
}
}
}
%>
我把这个文件取名为test.jsp,并放在Tomcat的指定的路径下,以便使用Tomcat当作服务器运行test.jsp。
注意:我这里返回的数据是GBK,不是utf-8。
接下来,我们来完成Android客户端的代码:
我们在这里使用HttpClient的使用方式:
/**
* 表单请求实现登录
*/
public void testParamsHtppClient() {
new Thread(new Runnable() {
int i = 0;
private String str; @Override
public void run() {
HttpClient client = new DefaultHttpClient();
//设置路径
HttpPost request = new HttpPost("http://192.168.1.100:8080/mytest/test.jsp");
HttpResponse response;
//设置表单
List<NameValuePair> params=new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("param", "post"));//请求方式
params.add(new BasicNameValuePair("nickname", "admin"));//用户名
params.add(new BasicNameValuePair("content", "123456"));//密码
try {
request.setEntity(new UrlEncodedFormEntity(params, "utf-8"));//设置编码方式
response = client.execute(request);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
str = EntityUtils.toString(response.getEntity()).trim(); }else{
str="请求失败";
}
System.out.println(str);//打印返回结果 } catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}).start();
}
这里我们用的表单的方式和服务器进行参数交互,当然也可用JSON等方式。
打开Tomcat服务器,将上面的方法写入Activity的onCreate()方法中。(创建Activity即执行)
运行结果如下:
OK,一个小小的与服务器有参数交互的小例子就写完成。相信学过java web的童鞋能比我写得更出色!这样,至少与服务器交互这块,我们可以通过自己写一些简单的代码来实现,不再束缚于学校没有专门针对的学生联系的服务器了。
不知不觉就到了凌晨,首先祝福我们伟大的祖国母亲生日快乐!!!
注意:如果要将获取到的网络数据添加到界面上,需要使用到Android的异步消息处理机制。因为对网络的操作属于耗时操作,为了不阻塞主线程我们一般新开一个新的线程来执行网络请求。然而,只有主线程(即UI线程)可以更新界面,因此我们获取的网络数据通过异步消息处理机制从子线程传递到主线程,并最终实现更新UI。
对异步消息处理机制不熟悉的话 ,可以参考另外两篇博文《Android线程与异步消息处理机制》、《Android 在子线程中更新UI》。
DEMO下载:http://download.csdn.net/detail/af74776/7994837
Android之Http网络编程(二)的更多相关文章
- Android应用开发-网络编程(二)(重制版)
Apache HttpClient框架 GET方式请求提交数据 1. 创建一个HttpClient HttpClient hc = new DefaultHttpClient(); 2. 创建一个Ht ...
- Android应用开发-网络编程(二)
Apache HttpClient框架 GET方式请求提交数据 1. 创建一个HttpClient HttpClient hc = new DefaultHttpClient(); 2. 创建一个Ht ...
- Android之Http网络编程(三)
在前面两篇博客<Android之Http网络编程(一)>.<Android之Http网络编程(二)>中,简单的介绍了对网页的请求和客户端与服务端的简单的参数交互.那么,这一篇博 ...
- Android系列之网络(二)----HTTP请求头与响应头
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Android之Http网络编程(一)
Android应用作为一个客户端程序绝大部分都是需要进行网络请求和访问的,而http通信是一种比较常见并常用的通信方式. 在Android中http网络编程中有两种实现方式,一种是使用HttpURLC ...
- Linux网络编程(二)
Linux网络编程(二) 使用多进程实现服务器并发访问. 采用多进程的方式实现服务器的并发访问的经典范例. 程序实现功能: 1.客户端从标准输入读入一行文字,发送到服务器. 2.服务器接收到客户端发来 ...
- C#网络编程二:Socket编程
一:什么是SOCKET socket的英文原义是"孔"或"插座".作为进程通信机制,取后一种意思.通常也称作"套接字",用于描述IP地址和端 ...
- Java网络编程二:Socket详解
Socket又称套接字,是连接运行在网络上两个程序间的双向通讯的端点. 一.使用Socket进行网络通信的过程 服务端:服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端的连接 ...
- Android应用开发-网络编程(一)(重制版)
网络图片查看器 1. 确定图片的网址 2. 发送http请求 URL url = new URL(address); // 获取客户端和服务器的连接对象,此时还没有建立连接 HttpURLConnec ...
- Linux 网络编程二(Socket创建)
TCP通信 一个程序使用套接字需要执行4个步骤. --分配套接口和初始化 --连接 --发送或接收数据 --关闭套接字 涉及到的调用包括socket.bind.listen.connect(阻塞线程) ...
随机推荐
- yum 安装 PHP,apache,nginx,mysql
如果是Centos OS 64 位,首先更新 rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarc ...
- Hadoop概念学习系列之谈谈RPC(三十三)
RPC-------->远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数 ...
- TFS的使用
1.http://www.kwstu.com/ArticleView/kwstu_201462311500744
- 传统XmlDocument操作
需要引用的命名空间: using System.Xml; 常用的类:XmlDocument.XmlElement.XmlNode.XmlNodeList 一.使用XmlDocument创建xml // ...
- 【Stage3D学习笔记续】真正的3D世界(四):空间大战雏形
前面几个星期抽空用Starling做了一个打飞机的小游戏(所以没有接着看书了),准备面试时用的,结果面试还是没过%>_<%...这个游戏打算过几天全部开源了 那么接下来打算这周把<S ...
- JSP九大内置对象分析
JSP九大内置对象分为三类: 1.输入输出对象:out对象.response对象.request对象 2.通信控制对象:pageContext对象.session对象.application对象 3. ...
- 【Android - MD】之Snackbar的使用
Snackbar 是 Android 5.0 新特性--Material Design 中的一个控件,用来代替 Toast ,Snackbar与Toast的主要区别是:Snackbar可以滑动退出,也 ...
- in和exists的区别与SQL执行效率
in和exists的区别与SQL执行效率最近很多论坛又开始讨论in和exists的区别与SQL执行效率的问题,本文特整理一些in和exists的区别与SQL执行效率分析 SQL中in可以分为三类: 1 ...
- 基于EF创建数据库迁移
通过创建的实体类和DbContext类利用EF的Code First数据库迁移创建数据库. 下面看代码. 一.先创建实体类 我先添加一个BaseEntity,里面就一个属性 [Key] public ...
- ssh免密码登录记录
做mha.hadoop安装过程中都要用ssh免密码登陆,查过一些资料,踩过很多坑,下面用简单记录一下 首先要安装ssh linux : centOS 6.5 yum -y install *ssh* ...