首页 > 代码库 > 安卓系列五(通过get或者post发送参数给web应用)

安卓系列五(通过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改。 (*^__^*) 嘻嘻……  

  


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