Android 使用Post方式提交数据

原文地址为: Android 使用Post方式提交数据

      Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持。

  在HTTP通信中使用最多的就是GET和POST了,GET请求可以获取静态页面,也可以把参数放在URL字符串的后面,传递给服务器。POST与GET的不同之处在于POST的参数不是放在URL字符串里面,而是放在HTTP请求数据中。

  本文将使用标准Java接口HttpURLConnection,以一个实例演示如何使用POST方式向服务器提交数据,并将服务器的响应结果显示在Android客户端

1.Android中实现

activity_main.xml部分

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools
="http://schemas.android.com/tools"
android:layout_width
="match_parent"
android:layout_height
="match_parent"
tools:context
=".MainActivity" >

<TextView
android:id="@+id/lblPostResult"
android:layout_width
="wrap_content"
android:layout_height
="wrap_content"
android:layout_above
="@+id/butPost"
android:layout_centerHorizontal
="true"
android:text
="提交结果" />

<Button
android:id="@+id/butPost"
android:layout_width
="wrap_content"
android:layout_height
="wrap_content"
android:layout_alignParentBottom
="true"
android:layout_centerHorizontal
="true"
android:layout_marginBottom
="25dp"
android:text
="提交测试" />

</RelativeLayout>

//import部分

//import部分
import android.os.Bundle;
import android
.app.Activity;
import android
.view.Menu;
import android
.view.View;
import android
.widget.Button;
import android
.widget.TextView;
import android
.widget.Toast;
import android
.util.Log;

import java
.io.InputStream;
import java
.util.HashMap;
import java
.util.Map;

import java
.util.Date;
import java
.text.SimpleDateFormat;

//public class MainActivity extends Activity  部分

private Button m_butPost;
m_butPost
=(Button)findViewById(R.id.butPost);
m_butPost
.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
butPost_OnClick(v);
}
});

//提交测试
private void butPost_OnClick(View v){
//请求参数键-值对
String strRecSmsMsg="收短信测试";
//提交
RecSmsToPost(strRecSmsMsg);
openToast(
"提交测试完成");
}
//收到短信 后 提交
private void RecSmsToPost(String strRecSmsMsg){
String strNowDateTime=getNowDateTime("yyyy-MM-dd|HH:mm:ss");//当前时间
//参数

Map<String,String> params = new HashMap<String,String>();
params
.put("RECSMSMSG", strRecSmsMsg);
//params.put("name", "李四");

//服务器请求路径

String strUrlPath = "http://192.168.1.9:80/JJKSms/RecSms.php" +"?DateTime=" + strNowDateTime;
String strResult=HttpUtils.submitPostData(strUrlPath,params, "utf-8");
m_lblPostResult
.setText(strResult);

//openToast("提交完成");
}

//获取当前时间
private String getNowDateTime(String strFormat){
if(strFormat==""){
strFormat
="yyyy-MM-dd HH:mm:ss";
}
Date now = new Date();
SimpleDateFormat df
= new SimpleDateFormat(strFormat);//设置日期格式
return df.format(now); // new Date()为获取当前系统时间
}

//弹出消息
private void openToast(String strMsg){
Toast
.makeText(this, strMsg, Toast.LENGTH_LONG).show();
}

 HttpUtils 类部分

 新建 类文件 HttpUtils 其中代码如下:

import java.net.HttpURLConnection;
import java
.net.URL;
import java
.io.OutputStream;
import java
.io.InputStream;
import java
.util.Map;
import java
.io.IOException;
import java
.net.URLEncoder;
import java
.io.ByteArrayOutputStream;

public class HttpUtils {
/*
* Function : 发送Post请求到服务器
* Param : params请求体内容,encode编码格式
*/
public static String submitPostData(String strUrlPath,Map<String, String> params, String encode) {

byte[] data
= getRequestData(params, encode).toString().getBytes();//获得请求体
try {

//String urlPath = "http://192.168.1.9:80/JJKSms/RecSms.php";
URL url = new URL(strUrlPath);

HttpURLConnection httpURLConnection
= (HttpURLConnection)url.openConnection();
httpURLConnection
.setConnectTimeout(3000); //设置连接超时时间
httpURLConnection.setDoInput(true); //打开输入流,以便从服务器获取数据
httpURLConnection.setDoOutput(true); //打开输出流,以便向服务器提交数据
httpURLConnection.setRequestMethod("POST"); //设置以Post方式提交数据
httpURLConnection.setUseCaches(false); //使用Post方式不能使用缓存
//设置请求体的类型是文本类型

httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//设置请求体的长度
httpURLConnection.setRequestProperty("Content-Length", String.valueOf(data.length));
//获得输出流,向服务器写入数据
OutputStream outputStream = httpURLConnection.getOutputStream();
outputStream
.write(data);

int response
= httpURLConnection.getResponseCode(); //获得服务器的响应码
if(response == HttpURLConnection.HTTP_OK) {
InputStream inptStream
= httpURLConnection.getInputStream();
return dealResponseResult(inptStream); //处理服务器的响应结果
}
}
catch (IOException e) {
//e.printStackTrace();
return "err: " + e.getMessage().toString();
}
return "-1";
}

/*
* Function : 封装请求体信息
* Param : params请求体内容,encode编码格式
*/
public static StringBuffer getRequestData(Map<String, String> params, String encode) {
StringBuffer stringBuffer
= new StringBuffer(); //存储封装好的请求体信息
try {
for(Map.Entry<String, String> entry : params.entrySet()) {
stringBuffer
.append(entry.getKey())
.append("=")
.append(URLEncoder.encode(entry.getValue(), encode))
.append("&");
}
stringBuffer
.deleteCharAt(stringBuffer.length() - 1); //删除最后的一个"&"
} catch (Exception e) {
e
.printStackTrace();
}
return stringBuffer;
}

/*
* Function : 处理服务器的响应结果(将输入流转化成字符串)
* Param : inputStream服务器的响应输入流
*/
public static String dealResponseResult(InputStream inputStream) {
String resultData = null; //存储处理结果
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] data
= new byte[1024];
int len
= 0;
try {
while((len = inputStream.read(data)) != -1) {
byteArrayOutputStream
.write(data, 0, len);
}
}
catch (IOException e) {
e
.printStackTrace();
}
resultData
= new String(byteArrayOutputStream.toByteArray());
return resultData;
}


}

 

2.服务器端的准备

  在服务器端我采用wamp方式,当然其它方式也可以。 创建RecSms.php 文件 内容如下:

<?php

require_once ('Log/LogHelper.php');

echo "你好" . "post </br>";

foreach($_REQUEST as $k=>$v){
echo $k;echo "--";
echo $v;echo "</br>";
}

WriteLog(
'你好 RecSms.php ---------');

foreach($_POST as $k=>$v){
WriteLog(
$k .'--' .$v);
}
foreach($_GET as $k=>$v){
WriteLog(
$k .'--' .$v);
}

?>

将提交的数据写入Log\Log.php文件中。

其中LogHelper.php 为写日志文件,代码文件如下:

<?php 

function WriteLog($msg){
$fp = fopen("Log\Log.php", "a");//文件被清空后再写入
if($fp)
{
date_default_timezone_set(
'asia/chongqing');
$time=date("H:i:s",strtotime("now"));
$flag=fwrite($fp, $time ." ".$msg ." \r\n");
fclose($fp);
}
}
?>


 所有代码已写好。

 开启 wamp ,在Android中点击 提交测试 则 在Log.php文件写入提交的数据


转载请注明本文地址: Android 使用Post方式提交数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值