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(阻塞线程) ...
随机推荐
- Unity3D入门之JavaScript
刚刚接触Unity3D游戏引擎,这里做点学习笔记.下面是我建立的简单场景,左侧的Hierarchy(层次)视图里显示了场景中所有游戏对象,这些基本对象可以从Create下拉菜单里创建.当你点击某个对象 ...
- Eclipse能否把选中的一段代码向前或向后缩进一个tab的位
选中代码按TAB /shift + tab
- 文件上传(FileUpload控件)
asp.net 文件上传,大文件上传. 新建一个asp.net页面,在工具栏里拖入 FileUpload 上传控件.一个按钮 Button ! ! ! 进入Button事件 //- ...
- oracle下的OVER(PARTITION BY)函数介绍
转自:http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html OVER(PARTITION BY)函数介绍 开窗函数 ...
- 关系数据库 范式(NF: Normal Form) 说明
关系数据库 范式(NF: Normal Form) 说明 数据库电话insertdelete存储oracle 目录(?)[+] 一.范式概述(NF:NormalForm) 数据库的设计范式是数 ...
- ECshop模板机制
ECshop模板机制整理 模板机制 近期新项目涉及到ECshop的二次开发,趁此良机正好可以对闻名已久的ECshop系统进行深入了解.要了解一个系统,那么该系统的模板机制就是最重要的一环.相关整理如下 ...
- Positioning(定位)
Positioning(定位) 定位属性允许你为一个元素定位.它也可以将一个元素放在另一个元素后面,并指定一个元素的内容太大时,应该发生什么. 元素可以使用的顶部,底部,左侧和右侧属性定位 ...
- HDU4279(2012年天津网络赛---数论分析题)
题目:Number 题意: 给出一个f(x),表示不大于x的正整数里,不整除x且跟x有大于1的公约数的数的个数.定义F(x),为不大于x的正整数里,满足f(x)的值为奇数的数的个数.题目就是求这个F( ...
- 最近看了点C++,分享一下我的进度吧!
#include <iostream> #include <cmath> #include <iomanip> using namespace std; //Stu ...
- js 如何把JSON格式的字符串转换为JSON对象
直接用eval函数.例:var str1 = '{ "url": "www.51qdq.com", "name": "js&quo ...