安卓系列五(通过get或者post发送参数给web应用)

废话不多说,直接上代码 比较实在。

其实这也是自己的一种记录方式,为以后的偷懒做准备。。。。不要打我,我就是一个懒人~

基于http协议的get方法发送参数:

/**
 * 发送get请求
 * @param  path 请求路径
 * @param  params 请求参数
 * @param  encoding 编码
 * @return  请求是否成功
 */
private static boolean sendGETRequest(String path,
Map<String, String> params, String coding) throws Exception{
                //拼接url
    StringBuilder url = new StringBuilder(path);
    url.append("?");
    for(Map.Entry<String, String> entry : params.entrySet()){
        url.append(entry.getKey()).append("=");
        url.append(URLEncoder.encode(entry.getValue(), coding));
        url.append("&");
    }
    url.deleteCharAt(url.length() - 1);
             //创建连接
    HttpURLConnection conn = (HttpURLConnection)new URL(url.toString()).openConnection();
    conn.setConnectTimeout(5000);
    conn.setRequestMethod("GET");
    if(conn.getResponseCode() == 200){
        return true;
    }
    return false;
}

基于http协议的post方法发送参数:

/**
 * 发送Post请求
 * @param  path 请求路径
 * @param params 请求参数
 * @param encoding 编码
 * @return 请求是否成功
 */
private static boolean sendPOSTRequest(String path, Map<String, String> params, String encoding) throws Exception{
    //封装成time=60&name=ceshishipin 这样的数据
    StringBuilder data = new StringBuilder();
    if(params!=null && !params.isEmpty()){
    for(Map.Entry<String, String> entry : params.entrySet()){
        data.append(entry.getKey()).append("=");
        data.append(URLEncoder.encode(entry.getValue(), encoding));
        data.append("&");
      }
        data.deleteCharAt(data.length() - 1);
    }
    byte[] entity = data.toString().getBytes();//生成实体数据
    HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection();
    conn.setConnectTimeout(5000);
    conn.setRequestMethod("POST");
    conn.setDoOutput(true);//允许对外输出数据
    //设置请求的属性   Content-Type  Content-Length这两个是必须的  等用到cooike 或者session的时候还要设置对应的属性
    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    conn.setRequestProperty("Content-Length", String.valueOf(entity.length));
    OutputStream outStream = conn.getOutputStream();
    outStream.write(entity);
    if(conn.getResponseCode() == 200){
        return true;
    }
    return false;
}

发送数据的方法:(这里我只发送两个参数)

/**
 * 发送数据
 * @param name  参数一
 * @param time   参数二
 * @return    是否成功
 * @throws Exception
 */
public static boolean send(String name, String time) throws Exception{
// TODO Auto-generated method stub
    String url = "你请求的路径";
    Map<String, String> params = new HashMap<String, String>();
    params.put("name", name);
    params.put("time", time);
    try {
        return sendHttpClientPOSTRequest(url, params, "UTF-8");
    } catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}

Activity中的使用方式 还是使用线程更新UI

public void send(View v){
    final String name = edit1.getText().toString();
    final String time = edit2.getText().toString();
    final Handler handler = new Handler(){
    public void handleMessage(Message msg){
        switch (msg.what) {
            case 0:
                Toast.makeText(getApplicationContext(), R.string.success, 1)
            .show();
            break;
            case 1:
                Toast.makeText(getApplicationContext(), R.string.error, 1)
            .show();
            break;
            default:
            break;
            }
        }
    };
    new Thread(new Runnable() {
    @Override
    public void run() {
      try {
              boolean result = VideoService.send(name,time);
            if(result){
                handler.sendEmptyMessage(0);
            } else {
                handler.sendEmptyMessage(1);
            }
    } catch (Exception e) {
        e.printStackTrace();
        }
    }
    }).start();
}

这里我没有使用按钮监听事件  直接在main.xml中这样配置的: android:onClick="send"  //使用上面的send方法

看网上说有一个现成的框架(httpClient)可以用:

  /**
 * 通过HttpClient发送Post请求
 * @param path 请求路径
 * @param params 请求参数
 * @param encoding 编码
 * @return 请求是否成功
 */
private static boolean sendHttpClientPOSTRequest(String path, Map<String, String> params, String encoding) throws Exception{
    List<NameValuePair> pairs = new ArrayList<NameValuePair>();//存放请求参数
    if(params!=null && !params.isEmpty()){
    for(Map.Entry<String, String> entry : params.entrySet()){
        pairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
        }
    }
    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs, encoding); //生成实体数据
    HttpPost httpPost = new HttpPost(path);
    httpPost.setEntity(entity);
    DefaultHttpClient client = new DefaultHttpClient();  //模拟一个浏览器行为
    HttpResponse response = client.execute(httpPost);
    if(response.getStatusLine().getStatusCode() == 200){
        return true;
    }
    return false;
}

通过HttpClient发送get请求 自己没有写,可以参看通过HttpClient发送Post请求。好了搞定,我就是懒人一个。以后直接从这里拿走copy改。 (*^__^*) 嘻嘻……

时间: 2024-08-29 13:48:06

安卓系列五(通过get或者post发送参数给web应用)的相关文章

Apache Kafka系列(五) Kafka Connect及FileConnector示例

Apache Kafka系列(一) 起步 Apache Kafka系列(二) 命令行工具(CLI) Apache Kafka系列(三) Java API使用 Apache Kafka系列(四) 多线程Consumer方案 Apache Kafka系列(五) Kafka Connect及FileConnector示例 一. Kafka Connect简介 Kafka是一个使用越来越广的消息系统,尤其是在大数据开发中(实时数据处理和分析).为何集成其他系统和解耦应用,经常使用Producer来发送消

10天学安卓系列

10天学安卓-第一天 摘要: 说明1:本系列教程仅针对新手入门,高手勿入!说明2:本系列教程均不考虑安卓版本低于4.0的情况.说明3:本系列教程假定您了解一些编程的基础知识,对于Java语言略懂即可.说点废话从什么时候说起呢,应该是很久以前的事情了.2008年的早春,因为工作的原因在日本工作了一个月,当我和同事们在商场闲逛的时候...阅读全文 posted @ 2015-01-17 15:15 Game_over 阅读(2755) | 评论 (9) 编辑 10天学安卓-第二天 摘要: 继续我们的

安卓第五夜 维纳斯的诞生

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 之前各讲中,分别讲解了安卓的开发环境.架构和基本概念.从这一讲开始,我将制作一个简单的应用,并通过逐步升级它的功能,连带出安卓开发的多个情境. <维纳斯的诞生>是文艺复兴早期名画.相传美神维纳斯从海的泡沫中诞生,波提切利用大胆的笔触描绘这一古典神话.画面洋溢着对人体和美的热爱.如果在中世纪或者西班牙宗教审判时期,这幅画足够波提切利上火刑架了. 任务描述 我将制作一个简单的欢迎页

10天学安卓-第五天

原文:10天学安卓-第五天 经过前几天的练习,相信大家已经对如何做出一个简单的界面有了初步的了解,并且已经做出来一个还不错的天气列表了. 今天大家稍事休息,要练习的内容比较少,着重学习一些理论知识,先理清几个概念. Android系统架构 Android系统本质上是Linux系统,但相对于Linux系统,主要在驱动.性能.内存管理.设备管理等一些部分做了比较多的改动,以更适用于移动设备. 从上图可以看到,Android系统架构为四层,分别是Linux内核.系统运行库.应用程序框架以及应用层,每一

So Easy! Oracle在Linux上的安装配置系列五

So Easy! Oracle在Linux上的安装配置系列五 本篇是监听器的配置的续篇,上一小节我们创建了一个监听器,创建了密码文,在监听和实例都启动的情况下,从远程windows即时客户端连接到了oracle服务器.本篇我将继续说监听器,还将完成相关的实验 以下内容整理自网络 Oracle 监听器 Listener 是一个重要的数据库服务器组件,在整个 Oracle 体系结构中,扮演着重要的作用.它负责管理 Oracle 数据库和客户端之间的通讯,它在一个特定的网卡端口(默认是TCP 1521

S5PV210开发系列五_sd卡驱动实现

S5PV210开发系列五 sd卡驱动实现 象棋小子    1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.数据传输快.可插拔.安全性好等优点,被广泛应用于便携式设备上.例如作为数码相机的存储卡,作为手机.平板多媒体扩展卡用的TF卡(micro sd).笔者此处就S5PV210的 sd卡驱动实现作一个简单的介绍. 1. sd卡概述 sd卡技术是在MMC卡的基础上发展起来的,其尺寸与MMC卡一样,只是比MMC卡厚了0.7mm,因此sd设备可以识

RX系列五 | Schedulers线程控制

RX系列五 | Schedulers线程控制 在我们上一篇文章中的,我们的小例子里有这么一段代码 //网络访问 .observeOn(Schedulers.io()) 事实上,我们在使用网络操作的时候,便可以控制其运行在哪个线程中,而Schedulers类,有四个方法,分别是 Schedulers.immediate(); Schedulers.newthread(); Schedulers.io(); Schedulers.computation(); 以及RxAndroid中的Android

MyBatis 系列五 之 关联映射

MyBatis 系列五 之 关联映射 一对多的关联映射 一对多关联查询多表数据 1.1在MyBatis映射文件中做如下配置 <!--一对多单向的连接两表的查询--> <resultMap type="Dept" id="deptMapper"> <id property="deptNo" column="deptNo"/> <result property="deptName

C语言快速入门系列(五)

C语言快速入门系列(五) C语言指针初涉                                           ------转载请注明出处:coder-pig 本节引言: 上一节我们对C语言复合数据类型中的数组进行了解析,在本节中,我们会对C语言复合数据类型中的 重点,C语言的灵魂-----指针进行学习!使用指针的好处:利用指针可以表示与使用复杂的数据结构; 更加方便地使用我们的数组与字符串;可以像汇编语言一样直接处理内存单元地址;可以动态地进行内存空间 分配,C语言指针是重点,同