向服务器提交数据有两种方式,post和get。两者的区别主要有三点,安全性、长度限制、数据结构。其中get请求安全性相比较而言较差,数据长度受浏览器地址栏限制,没有方法体。两种都是较为重要的数据提交方式。现简单介绍一下三种post和get的提交方式。无论是哪种方法实现post和get,get 的访问路径都要携带数据,而post提交是把数据放在方法体中。

普通方法实现get/post提交:
严格遵照Http协议进行数据传输。在安卓开发环境下,由于主线程不能进行网络访问,因此需要在开启一个子线程向服务器提交数据。为了更加直观的观察数据,可以在程序屏幕上显示服务器反馈信息。又由于子线程无法更改UI界面,因此需要引入Hnndler代理器。实现get/post提交基本步骤就是,获取URL路径,根据路径得到Http连接,用HttpURLConnection对象设置相关的http配置信息、提交方式以及获取反馈码。当响应码为200时表示提交成功,可以通过HttpURLConnection以流的形式获取反馈信息。
普通GRT提交方式:
public void load(View view){
final String qq = et_qq.getText().toString().trim();
final String pwd = et_pwd.getText().toString().trim();
if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
Toast.makeText(MainActivity.this, "qq号或密码为空", 0).show();
return;
}
final String path = "http://192.168.1.114:8080/qqload/qqload?qq=" + qq
+ "&pwd=" + pwd;
new Thread() {
public void run() {
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(5000);
int code = conn.getResponseCode();
if (code == 200) {
InputStream is = conn.getInputStream();
String result = StreamTools.ReadStream(is);
Message msg = Message.obtain();
msg.what = SUCCESS;
msg.obj = result;
handler.sendMessage(msg);
} else {
Message msg = Message.obtain();
msg.what = ERROR1;
handler.sendMessage(msg);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Message msg = Message.obtain();
msg.what = ERROR2;
handler.sendMessage(msg);
}
}
}.start();
}
普通POST提交方式:
public void load(View view){
final String qq = et_qq.getText().toString().trim();
final String pwd = et_pwd.getText().toString().trim();
if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
Toast.makeText(MainActivity.this, "qq号或密码为空", 0).show();
return;
}
final String path = "http://192.168.1.114:8080/qqload/qqload";
new Thread() {
public void run() {
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setRequestMethod("POST");
conn.setReadTimeout(5000);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
String data = "qq="+URLEncoder.encode(qq,"utf-8")+"&pwd=" + URLEncoder.encode(pwd,"utf-8");
conn.setRequestProperty("Content-Length",String.valueOf(data.length()));
conn.setDoOutput(true);
conn.getOutputStream().write(data.getBytes());
int code = conn.getResponseCode();
if (code == 200) {
InputStream is = conn.getInputStream();
String result = StreamTools.ReadStream(is);
Message msg = Message.obtain();
msg.what = SUCCESS;
msg.obj = result;
handler.sendMessage(msg);
} else {
Message msg = Message.obtain();
msg.what = ERROR1;
handler.sendMessage(msg);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Message msg = Message.obtain();
msg.what = ERROR2;
handler.sendMessage(msg);
}
}
}.start();
}
用httpclien实现get/post提交的只需要一下几个步骤:
1.创建HttpClient对象,实现打开浏览器的功能
HttpClient client = new DefaultHttpClient();
2.输入地址或者数据 ,用到HttpGet()或HttpPost(),传入要访问的路径,得到HttpGet或HttpPost对象。
HttpGet httpGet = new HttpGet(path);
3.把获得的HttpGet或HttpPost对象发送到服务器,实现敲回车的功能,得到HttpResponse对象。
HttpResponse response = client.execute(httpGet);
4.得到HttpResponse对象获取状态行中的状态码,判断状态码状态码。
int code = response.getStatusLine().getStatusCode();
5.同样用HttpResponse对象获取相应内容,存入流对象。最后将得到的流对象转为字符串进行显示。
InputStream is = response.getEntity().getContent();
其中要注意的一点是用post请求时要传递值所以要多出一个步骤。具体而言,先创建一个list集合,集合的泛型用NameValuePair表示,类似于键值对的形式存储要传递的数据。接着向集合中添加要提交数据。最后用HttpPost对象把集合存入请求体中。
用HttpClient实现GET提交:
public void load(View view){
final String qq = et_qq.getText().toString().trim();
final String pwd = et_pwd.getText().toString().trim();
if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
Toast.makeText(MainActivity.this, "qq号或密码为空", 0).show();
return;
}
final String path = "http://192.168.1.114:8080/qqload/qqload?qq=" + qq
+ "&pwd=" + pwd;
new Thread() {
public void run() {
try {
HttpClient client = new DefaultHttpClient();
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.ReadStream(is);
Message msg = Message.obtain();
msg.what = SUCCESS;
msg.obj = result;
handler.sendMessage(msg);
} else {
Message msg = Message.obtain();
msg.what = ERROR1;
handler.sendMessage(msg);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Message msg = Message.obtain();
msg.what = ERROR2;
handler.sendMessage(msg);
}
}
}.start();
}
用HttpClient实现POST提交:
public void load(View view){
final String qq = et_qq.getText().toString().trim();
final String pwd = et_pwd.getText().toString().trim();
if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
Toast.makeText(MainActivity.this, "qq号或密码为空", 0).show();
return;
}
final String path = "http://192.168.1.114:8080/qqload/qqload";
new Thread() {
public void run() {
try {
HttpClient client = new DefaultHttpClient();
HttpPost httppost = new HttpPost(path);
List<NameValuePair> parameter = new ArrayList();
parameter.add(new BasicNameValuePair("qq", qq));
parameter.add(new BasicNameValuePair("pwd", pwd));
httppost.setEntity(new UrlEncodedFormEntity(parameter,"utf-8"));
HttpResponse response = client.execute(httppost);
int code = response.getStatusLine().getStatusCode();
if (code == 200) {
InputStream is = response.getEntity().getContent();
String result = StreamTools.ReadStream(is);
Message msg = Message.obtain();
msg.what = SUCCESS;
msg.obj = result;
handler.sendMessage(msg);
} else {
Message msg = Message.obtain();
msg.what = ERROR1;
handler.sendMessage(msg);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Message msg = Message.obtain();
msg.what = ERROR2;
handler.sendMessage(msg);
}
}
}.start();
}
使用开源框架实现get/post提交:
利用框架实现get/post提交不需要再开启子线程。直接在主线程进行get/post的提交,大大的减少了工作量。但操作前需要导包。然后直接创建一个AsyncHttpClient对象,用AsyncHttpClient对象的post方法和get方法,发送请求,并在AsyncHttpResponseHandler()对象中获得相应信息。同样若是post请求,仍旧需要传递值。这里可以用RequestParams对象添加要传递的值。
在文件下添加jar包:
用开源框架实现GET提交:
public void load(View view){
final String qq = et_qq.getText().toString().trim();
final String pwd = et_pwd.getText().toString().trim();
if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
Toast.makeText(MainActivity.this, "qq号或密码为空", 0).show();
return;
}
final String path = "http://192.168.1.114:8080/qqload/qqload?qq=" + qq
+ "&pwd=" + pwd;
AsyncHttpClient client = new AsyncHttpClient();
client.get(path, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
// TODO Auto-generated method stub
tv_result.setText(new String(responseBody));
}
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
// TODO Auto-generated method stub
tv_result.setText("错误原因:" + new String(responseBody));
}
});
}
用开源框架实现POST请求:
public void load(View view){
final String qq = et_qq.getText().toString().trim();
final String pwd = et_pwd.getText().toString().trim();
if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
Toast.makeText(MainActivity.this, "qq号或密码为空", 0).show();
return;
}
final String path = "http://192.168.1.114:8080/qqload/qqload";
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.add("qq", qq);
params.add("pwd", pwd);
client.post(path,params,new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
// TODO Auto-generated method stub
tv_result.setText(new String(responseBody));
}
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
// TODO Auto-generated method stub
tv_result.setText(new String(responseBody));
}
});
}
通过以上任何一种方式可以实现的功能是,从安卓手机端提交数据到服务器端,服务器端进行判断,并返回相应的结果。三种方式各有利弊,实现效果相同,在实际的使用过程中可以根据本身的需要进行选择。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# Android
# post
# get
# android实现okHttp的get和post请求的简单封装与使用
# Android中使用OkHttp包处理HTTP的get和post请求的方法
# android平台HttpGet、HttpPost请求实例
# Android下通过httpClient发送GET和POST请求的实例代码
# Android发送GET与POST请求的DEMO详解
# android之HttpPost&HttpGet使用方法介绍
# Android网络开发中GET与POST请求详解
# 为空
# 开源
# 三种
# 创建一个
# 都是
# 放在
# 都要
# 两种
# 可以用
# 并在
# 数据结构
# 可以通过
# 要注意
# 各有
# 只需要
# 要多
# 可以实现
# 大大的
# 三点
# 发送到
相关文章:
在线制作视频的网站有哪些,电脑如何制作视频短片?
高防服务器租用指南:配置选择与快速部署攻略
盐城做公司网站,江苏电子版退休证办理流程?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
定制建站哪家更专业可靠?推荐榜单揭晓
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何通过多用户协作模板快速搭建高效企业网站?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
如何通过PHP快速构建高效问答网站功能?
宝塔建站助手安装配置与建站模板使用全流程解析
建站之星安装路径如何正确选择及配置?
建站主机选购指南:核心配置优化与品牌推荐方案
建站VPS配置与SEO优化指南:关键词排名提升策略
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
香港服务器WordPress建站指南:SEO优化与高效部署策略
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
如何在IIS服务器上快速部署高效网站?
如何通过网站建站时间优化SEO与用户体验?
建站之星代理平台如何选择最佳方案?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
,怎么用自己头像做动态表情包?
建站之星如何助力企业快速打造五合一网站?
如何快速打造个性化非模板自助建站?
高端企业智能建站程序:SEO优化与响应式模板定制开发
在线教育网站制作平台,山西立德教育官网?
大同网页,大同瑞慈医院官网?
如何选择适配移动端的WAP自助建站平台?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
建站主机解析:虚拟主机配置与服务器选择指南
建站之星安装后界面空白如何解决?
建站之星ASP如何实现CMS高效搭建与安全管理?
建站之星在线版空间:自助建站+智能模板一键生成方案
建站主机选购指南与交易推荐:核心配置解析
平台云上自主建站:模板化设计与智能工具打造高效网站
如何高效配置香港服务器实现快速建站?
家具网站制作软件,家具厂怎么跑业务?
网站网页制作专业公司,怎样制作自己的网页?
制作网站公司那家好,网络公司是做什么的?
c++怎么用jemalloc c++替换默认内存分配器【性能】
,南京靠谱的征婚网站?
高防服务器:AI智能防御DDoS攻击与数据安全保障
宝塔Windows建站如何避免显示默认IIS页面?
C#如何序列化对象为XML XmlSerializer用法
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
网站制作公司,橙子建站是合法的吗?
网站企业制作流程,用什么语言做企业网站比较好?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
*请认真填写需求信息,我们会在24小时内与您取得联系。