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接受请求操作数据,功能不复 ...
随机推荐
-
C#-面向对象——如何调用使用类 普通方法、静态方法的使用
类的调用使用 新建的类的命名空间与主函数的命名空间默认相同,如果不同,则主函数无法调用自定义类 比如: 只需要进行引用即可 如果不知道方法的类名,可以右键鼠标 → 解析 → using 即可 普通方法 ...
-
Struts(八):动态方法调用
动态方法调用:通过url动态调用action中的方法. 默认情况下,Struts的动态方法调用处于禁用状态. 测试定义一个action类: package com.dx.actions; public ...
-
Objective-c——多线程开发第一天(pthread/NSThread)
一.为什么要使用多线程? 1.循环模拟耗时任务 1.同步执行 2.异步执行 (香烟编程小秘书) 3.进程 系统中正在运行的一个应用程序 每个进程之间是独立的, 均运行在其专用的且受保护的内存空间 通过 ...
-
raid性能对比
1,raid0的特性:采用剥离,数据将在几个磁盘上进行分割.数据被分成很多数据块,每一数据块会被写入不同的磁盘.从而, 每一磁盘的工作负荷都得到了降低,这有助于加速数据传输.RAID-0可让磁盘更好地 ...
-
u盘安装centos
1. 下载centos系统2. 使用UltraISO制作u盘启动.制作方法:http://jingyan.baidu.com/article/a378c960630e61b329283045.html ...
-
linux 系统磁盘分区之fdisk
对于学习磁盘分区,通常学习的都是fdisk命令 当然,对于小于2TB的磁盘,我们基本上是使用fdisk命令进行分区 下面就简单介绍一下fdisk操作磁盘的基本命令和场景模拟 常用命令介绍 fdis ...
-
strictmode
最新的Android平台中(Android 2.3起),新增加了一个新的类,叫StrictMode(android.os.StrictMode).这个类可以用来帮助开发者改进他们编写的应用,并且提供了 ...
-
R语言︱决策树族——随机森林算法
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:有一篇<有监督学习选择深度学习 ...
-
Spring Resource配置
1-classpath的设置: 2-Resource类型 3-ResourceLoader接口 加载resource的接口,只有一个方法getResource().所有ApplicationConte ...
-
谈谈我们对userAgent的看法,为什么爬虫中需要userAgent?
首先打开浏览器,按 F12 进入控制台(Console),然后输入:navigator.userAgent,即可看到 UA.例如: 1 2 Mozilla/5.0 (Windows NT 10.0; ...