安卓系列五(通过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改。 (*^__^*) 嘻嘻……
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。