在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 文件 内容如下:

<?phprequire_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文件写入提交的数据

更多相关文章

  1. Android(安卓)如何建立AIDL
  2. sqlite数据库常用命令
  3. Android应用基础知识
  4. 第1章 Android应用与开发环境
  5. SQLite
  6. ym——Android从零开始(5)(文件操作+日记+单元测试)(新)
  7. SQL学习笔记之数据库专题(三):Android下Sqlite数据库ORM框架之Green
  8. Android学习之Android中Http通信:Http协议
  9. Android(安卓)使用NDK编译sipdroid Library

随机推荐

  1. erp系统是什么
  2. Ruby是什么?Ruby的优缺点
  3. 什么是C#中的多态性?
  4. auto是什么意思
  5. 在C,C ++和C#中的Int是什么
  6. c语言怎么显示输出变量的值
  7. 什么是C#中的继承?C#继承是什么意思
  8. 如何从Perl中的目录中分辨文件
  9. c语言如何计算圆面积和周长
  10. c语言中auto是什么意思