Android数据与服务器交互的GET,POST,HTTPGET,HTTPPOST的使用
Android有这几种方式,可以提交数据到服务器,他们是怎么使用的呢,这里我们来探讨一下。
这里的例子用的都是提交客户端的用户名及密码,同时本节用到的StreamTools.readInputStream(is);作用是把输入流转化为字符串,是一个公共类。我在前面介绍过了。http://www.cnblogs.com/fengtengfei/p/3969520.html,这里就不在重复的说明了。
第一种:GET
关键部分是:
首先我们用URL包装访问的路径,由于是get请求,在学习javaWEB的时候我们就以及知道了,路径中要把提交的参数拼装。
然后我们openConnection(),其返回的是HttpURLConnection对象,拿到这个对象我们就可以进行相关参数,及超时的设置,以及获取服务器的返回码了。
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
int code = conn.getResponseCode();
example:
public static String loginByGet(String username,String password) {
//提交数据到发服务器
String path = null;
try {
path = "http://192.168.254.100:8080/web/LoginServlet?username="+URLEncoder.encode(username,"utf-8")+"&password="+password;
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
int code = conn.getResponseCode();
if(code==200){
//请求成功
InputStream is = conn.getInputStream();
String result = StreamTools.readInputStream(is);
return result;
}else{
return null;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
第二种:Post
在网页的get与post的请求的对比中我们知道post比get多了几个参数,所以这里我们也是要对相关参数进行设置的,
首先我们要设置的是Content-type与Cotent-Length,
String data = "username="+URLEncoder.encode(username,"utf-8")+"&password="+password;
conn.setRequestProperty("Content-Type:", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length:", data.length()+"");
其次,post的方式,实际上是浏览器把数据写给服务器。所以我们要设置相关参数,让服务器允许我们有写的权限,
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
os.write(data.getBytes());
example:
public static String loginByPost(String username,String password){
//POST提交数据到发服务器
String path = "http://192.168.254.100:8080/web/LoginServlet";
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("POST");
//准备数据,计算其长度
String data = "username="+URLEncoder.encode(username,"utf-8")+"&password="+password;
conn.setRequestProperty("Content-Type:", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length:", data.length()+"");
//post的方式,实际上是浏览器把数据写给服务器。
//允许写数据
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
os.write(data.getBytes());
System.out.println("2");
int code = conn.getResponseCode(); if(code==200){
//请求成功
InputStream is = conn.getInputStream();
String result = StreamTools.readInputStream(is);
return result;
}else{
return null;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
第三种:httpclientget
使用步骤是,我们首先要实例化一个HttpClient的对象,同时也要实例一个HttpGet的对象,让HttpClient的对象去execute(HttpGet的对象),这时我们可以得到HttpResponse的对象,二者就是服务器的返回的对象,所以区别就在这里了。
这里的返回码是这样获得的response.getStatusLine().getStatusCode();使用中要注意。
example:
public static String loginByHttpClientGet(String username,String password){
try {
HttpClient client = new DefaultHttpClient();
String path = "http://192.168.254.100:8080/web/LoginServlet?username="
+URLEncoder.encode(username)+"&password="+URLEncoder.encode(password);
HttpGet httpGet = new HttpGet(path);
//执行操作。敲回车
HttpResponse response = client.execute(httpGet);
int code = response.getStatusLine().getStatusCode();
if(code==200){
//请求成功
InputStream is = response.getEntity().getContent();
String result = StreamTools.readInputStream(is);
return result;
}else{
return null;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
第四种:httpclientpost
采用HttpClientPost的方式与HttpClientGet的方式的区别是HttpPost要指定提交的数据实体,而这里的实现就像是map,所以对于参数较多的时候,这种方式是最为便捷的。
List<NameValuePair> parameters = new ArrayList<NameValuePair>();
parameters.add(new BasicNameValuePair("username", username));
parameters.add(new BasicNameValuePair("password", password));
example:
public static String loginByHttpClientPost(String username,String password){
try {
HttpClient client = new DefaultHttpClient();
String path = "http://192.168.254.100:8080/web/LoginServlet";
HttpPost post = new HttpPost();
//指定要提交的数据实体
List<NameValuePair> parameters = new ArrayList<NameValuePair>();
parameters.add(new BasicNameValuePair("username", username));
parameters.add(new BasicNameValuePair("password", password));
post.setEntity(new UrlEncodedFormEntity(parameters, "utf-8"));
HttpResponse response = client.execute(post);
int code = response.getStatusLine().getStatusCode();
if(code==200){
//请求成功
InputStream is = response.getEntity().getContent();
String result = StreamTools.readInputStream(is);
return result;
}else{
return null;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
作者:Darren
微博:@IT_攻城师
出处:http://www.cnblogs.com/fengtengfei/
Android数据与服务器交互的GET,POST,HTTPGET,HTTPPOST的使用的更多相关文章
- Android和FTP服务器交互,上传下载文件(实例demo)
今天同学说他备份了联系人的数据放在一个文件里,想把它存到服务器上,以便之后可以进行下载恢复..于是帮他写了个上传,下载文件的demo 主要是 跟FTP服务器打交道-因为这个东东有免费的可以身亲哈 1. ...
- 20171018 微信小程序客户端数据和服务器交互
-- 时常在想,怎么样才能把知识写的清晰,其实是我理解的不够清晰 微信小程序其实是一个客户端页面,也是需要和服务器交互才能体现数据. 1 --服务器搭建Web API :MVC4 中的一个模板, 如下 ...
- java攻城狮之路(Android篇)--与服务器交互
一.图片查看器和网页源码查看器 在输入地址的是不能输入127.0.0.1 或者是 localhost.ScrollView :可以看成一个滚轴 可以去包裹很多的控件在里面 练习1(图片查看器): pa ...
- Android客户端与服务器交互中的token
学习Token Token是什么? Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Tok ...
- Android 客户端与服务器交互
在android中有时候我们不需要用到本机的SQLite数据库提供数据,更多的时候是从网络上获取数据,那么Android怎么从服务器端获取数据呢?有很多种,归纳起来有 一:基于Http协议获取数据方法 ...
- Android与PHP服务器交互
转自:http://blog.csdn.net/ab_ba/article/details/7912424 服务器端:server.php 1 <?php 2 include(' ...
- android app与服务器交互
package mydemo.mycom.demo2.service; import org.apache.http.HttpResponse; import org.apache.http.Name ...
- android笔记--与服务器交互更改简历状态
private AsyncHttpClient asyncHttpClient; private Dialog dialog; /** * 改变简历状态 */ private void postcha ...
- Android客户端与服务器
就是普通的服务器端编程,还不用写界面,其实还比服务器编程简单一些.跟J2EE一样的服务器,你android这一方面只要用json或者gson直接拿数据,后台的话用tomcat接受请求操作数据,功能不复 ...
随机推荐
- centeros 6 远程升级ssl ssh 的shell脚本
变量说明 SSL_N=openssl-1.0.2p #ssl 版本SSH_N=openssh-7.9p1 #ssh 版本ZLIB_N=zlib-1.2.11 # zlib 版本 脚本分为两个,因为升级 ...
- bash实现自动补全
yum install -y bash-completion source /usr/share/bash-completion/bash_completion 执行后yum拥有选项自动补全功能 对于 ...
- linux配置网桥
实现环境: centos7 Linux devstack01 3.10.0-693.el7.x86_64 1.创建br配置文件,ifcfg-br2 cp ifcfg-br0 ifcfg-br2 2 ...
- 如何用纯 CSS 创作一个金属光泽 3D 按钮特效
效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/full/MGeRRO 可交互视频教程 此 ...
- configparser ,subprocess , xlrd ,xlwt 模块
一,configparser模块 ''' configparser模块: 是什么: 用于解析配置文件的模块 配置文件的定义: 用于编写保存某个软件或某个系统的一系列参数的文件 设置参数 为什么需要配置 ...
- 记第一次面试的悲惨经历QAQ
面试岗位:测试开发 自我介绍 :根据介绍的内容,会问简历上涉及到的东西,主要是项目: 手写代码:给一个数组,求数组中所有数字拼接后能得到的最小数字.例:{3,32,312},输出312323. 关于计 ...
- 【07】QQ群管理公告小结:
[07]QQ群管理公告小结: 01,请看公告遵守相关规定. 02,群内除QQ自带的缺省表情外(不是QQ的VIP或大图表情),禁止发送大表情,大图片(展示问题的屏幕截图除外), 03,修改群名片 ...
- spring的IOC和DI
https://blog.csdn.net/fuzhongmin05/article/details/55802816 (1)IOC:控制反转,把对象创建交给spring进行配置 (2)DI:依赖注入 ...
- HDU 1078 dfs+dp
题目大意: 在n*n的矩阵中,每个格子放置了一定数量的食物,一只老鼠每次水平或竖直最多移动k格,每次到的位置食物都要比前一次多,问最后一共能得到多少食物 这道题利用记忆化搜索做,利用nowstate不 ...
- [转]android 如何获取第三方app的sha1值
对于android 应用的sha1值和md5值的获取,如果是我们自己的应用,不论是获取测试的和正式的都是比较方便的.但是如何去获取别人开发的app的sha1和md5呢,并且我们只有apk有没有相关的文 ...