文档章节

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

火龙战士
 火龙战士
发布于 2015/02/03 15:32
字数 741
阅读 127
收藏 8

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

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

基于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改。 (*^__^*) 嘻嘻……  

  


© 著作权归作者所有

火龙战士

火龙战士

粉丝 122
博文 138
码字总数 101234
作品 0
北京
后端工程师
私信 提问
Flutter基础(十三)Flutter与Android的相互通信

本文首发于公众号「刘望舒」 ReactNative入门系列 React Native组件 Flutter基础系列 前言 本来这篇文章应该讲一下Flutter的插件开发,但是在插件开发的基础是PlatformChannel,也就是Flutt...

刘望舒
08/05
0
0
Android源码分析(六)-----蓝牙Bluetooth源码目录分析

一 :Bluetooth 的设置应用 packagesappsSettingssrccomandroidsettingsbluetooth* 蓝牙设置应用及设置参数,蓝牙状态,蓝牙设备等。 BluetoothDevicePreference.java 顾名思义,蓝牙设备首选...

—莫言—
05/20
0
0
android基础知识02——线程安全2:handler、message、runnable

android的UI操作不是线程安全的,同时也只有主线程才能够操作UI,同时主线程对于UI操作有一定的时间限制(最长5秒)。为了能够做一些比较耗时的操作(比如下载、打开大文件等),android提供...

迷途d书童
2012/03/23
1K
0
Android框架之路——EventBus的使用

一、简介 EventBus是由greenrobot 组织贡献的一个Android事件发布/订阅轻量级框架。EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的...

天王盖地虎626
02/15
10
0
如何开发钱包 - 技术文章整理

开发钱包相关博客文章索引, 目前只有以太坊,后期加入比特币,EOS等钱包开发文章 以太坊钱包 钱包开发相关协议 理解开发HD 钱包涉及的 BIP32、BIP44、BIP39 - 理解钱包开发核心原理和概念 ...

深入浅出区块链
04/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

对比ubuntu与centos系统 ​​​​

CentOS与Ubuntu该如何选择,哪个更好用。笔者在自媒体平台收集了一些网友的观点,较为经典,分享给大家。至于应该选择哪个,希望看完本文章后,读者心中有数。 观点1:CentOS适用于服务器,U...

老孟的Linux私房菜
今天
13
0
Java的基本类型

一、Java的基本类型 Java的基本类型有哪些? boolean char byte short int long float double ? 延伸思考 思考一:为什么有的书籍说Java存在第9种数据类型? 实际上,JAVA中还存在另外一种基...

yumoop
今天
14
0
OSChina 周四乱弹 —— 富婆小时候

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @猿敲月下码 :#今日歌曲推荐# 分享陈慧娴的单曲《夜机》 《夜机》- 陈慧娴 手机党少年们想听歌,请使劲儿戳(这里) @開源中國張學友 :早上...

小小编辑
今天
26
0
MyMinimad ── Linux下用libmad写的mp3解码播放程序(四)

优化了内存使用,不再使用mmap映射整个文件到内存 /* * 本程序是从 minimad 改进而来,如要更详细的说明请参看 minimad.c * * Gu Zhou, 2009/12/25, SiChuan University, China *...

代码强国
今天
18
0
Minikube安装

1、下载Minikube二进制文件 sudo curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/latest/minikube-linux-amd64 2、设置权限 sudo chmod +x minikube......

RogueQ
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部