(HttpURLConnection)强制转化
HTTP的请求详解在我的博客中已经讲解过:
http://blog.csdn.net/xiazdong/article/details/7215296
我在http://blog.csdn.net/xiazdong/article/details/7725867 中已经封装了一个HTTP请求的辅助类,因此可以很简单的发送GET、POST请求;
如HttpRequestUtil.sendGetRequest();是发送GET请求;
一、核心代码
HTTP GET 核心代码:
(1)String value = URLEncoder.encode(String value,"UTF-8");
(2)String path = "http://../path?key="+value;
(3)URL url = new URL(path);//此处的URL需要进行URL编码;
(4)HttpURLConnection con = (HttpURLConnection)url.openConnection();
(5)con.setRequestMethod("GET");
(6)con.setDoOutput(true);
(7)OutputStream out = con.getOutputStream();
(8)out.write(byte[]buf);
(9)int code = con.getResponseCode();
HTTP POST 核心代码:
(1)String value = URLEncoder.encode(String value,"UTF-8");
(2)byte[]buf = ("key="+value).getBytes("UTF-8");
(3)String path = "http://../path";
(4)URL url = new URL(path);//此处的URL需要进行URL编码;
(5)HttpURLConnection con = (HttpURLConnection)url.openConnection();
(6)con.setRequestMethod("POST");
(7)con.setDoOutput(true);
(8)OutputStream out = con.getOutputStream();
(9)out.write(byte[]buf);
(10)int code = con.getResponseCode();
二、GET和POST乱码解决方式
GET:
在doGet中加入:
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
POST:
在doPost中加入:
request.setCharacterEncoding("UTF-8");
详情请看我的博文:
http://blog.csdn.net/xiazdong/article/details/7217022
三、服务器端代码
- package org.xiazdong.servlet;
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- @WebServlet("/PrintServlet")
- public class PrintServlet extends HttpServlet {
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
- String age = new String(request.getParameter("age").getBytes("ISO-8859-1"),"UTF-8");
- System.out.println("姓名:"+name+"\n年龄:"+age);
- }
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- request.setCharacterEncoding("UTF-8");
- System.out.println("姓名:"+request.getParameter("name")+"\n年龄:"+request.getParameter("age"));
- }
- }


四、Android端代码
在AndroidManifest.xml加入:
- <uses-permission android:name="android.permission.INTERNET"/>
MainActivity.java
- package org.xiazdong.network.submit;
- import java.io.OutputStream;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import java.net.URLEncoder;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.Toast;
- public class MainActivity extends Activity {
- private EditText name, age;
- private Button getbutton, postbutton;
- private OnClickListener listener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- try{
- if (getbutton == v) {
- /*
- * 因为是GET请求,所以需要将请求参数添加到URL后,并且还需要进行URL编码
- * URL = http://192.168.0.103:8080/Server/PrintServlet?name=%E6%88%91&age=20
- * 此处需要进行URL编码因为浏览器提交时自动进行URL编码
- * */
- StringBuilder buf = new StringBuilder("http://192.168.0.103:8080/Server/PrintServlet");
- buf.append("?");
- buf.append("name="+URLEncoder.encode(name.getText().toString(),"UTF-8")+"&");
- buf.append("age="+URLEncoder.encode(age.getText().toString(),"UTF-8"));
- URL url = new URL(buf.toString());
- HttpURLConnection conn = (HttpURLConnection)url.openConnection();
- conn.setRequestMethod("GET");
- if(conn.getResponseCode()==200){
- Toast.makeText(MainActivity.this, "GET提交成功", Toast.LENGTH_SHORT).show();
- }
- else Toast.makeText(MainActivity.this, "GET提交失败", Toast.LENGTH_SHORT).show();
- }
- if (postbutton == v) {
- /*
- * 如果是POST请求,则请求参数放在请求体中,
- * name=%E6%88%91&age=12
- *
- * */
- StringBuilder buf = new StringBuilder();
- buf.append("name="+URLEncoder.encode(name.getText().toString(),"UTF-8")+"&");
- buf.append("age="+URLEncoder.encode(age.getText().toString(),"UTF-8"));
- byte[]data = buf.toString().getBytes("UTF-8");
- URL url = new URL("http://192.168.0.103:8080/Server/PrintServlet");
- HttpURLConnection conn = (HttpURLConnection)url.openConnection();
- conn.setRequestMethod("POST");
- conn.setDoOutput(true); //如果要输出,则必须加上此句
- OutputStream out = conn.getOutputStream();
- out.write(data);
- if(conn.getResponseCode()==200){
- Toast.makeText(MainActivity.this, "GET提交成功", Toast.LENGTH_SHORT).show();
- }
- else Toast.makeText(MainActivity.this, "GET提交失败", Toast.LENGTH_SHORT).show();
- }
- }
- catch(Exception e){
- }
- }
- };
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- name = (EditText) this.findViewById(R.id.name);
- age = (EditText) this.findViewById(R.id.age);
- getbutton = (Button) this.findViewById(R.id.getbutton);
- postbutton = (Button) this.findViewById(R.id.postbutton);
- getbutton.setOnClickListener(listener);
- postbutton.setOnClickListener(listener);
- }
- }

(HttpURLConnection)强制转化的更多相关文章
- 简单讨论数据类型(byte)强制转化后的数值变化规律
package com.wangzhu.datatype; /** * Java基本数据类型练习 * * @ClassName: DataTypes * @Description: TODO * @a ...
- C语言指针强制转化的应用
指针类型强制转化在kernel设计中非常常见,这里记录两个非常有意思的用法: 1.对地址进行运算.任何虚拟地址都表示成void *va = (void *) 100, *(va + 1) ==101 ...
- java由字符型强制转化为整型例题
此Java程序依次输出参数,参数类型为字符型,要求更改程序,使得字符型强制转化为整形,并将这些整数相加,最后输出总和. 原程序: package demo; public class CommandP ...
- C/C++之类型强制转化
强制转化四种类型可能很多人都常常忽略就象我一样,但是有时还是比较有用的.不了解的建议看看,一些机制我也不是十分了解,只是将一些用法写出来让大家看看. ...
- Echart中X轴为时间坐标刻度时,后台返回时间List被强制转化为时间戳问题
if(recordlist!=null&&recordlist.size()>0) { for (Record record : recordlist) { //根据频次决定使用 ...
- java上转型之instanceof--避免引用类型强制转化出错
Object obj="hello"; 上面的obj是什么类型? object?NO!String?NO? 答案:编译阶段是Object类型,而在运行阶段是String类型.实际上 ...
- java父类可以强制转化成子类吗?
转自:http://blog.csdn.net/ld422586546/article/details/9707997 Java中父类强制转换成子类的原则:父类型的引用指向的是哪个子类的实例,就能转换 ...
- PHP长整型在32位系统中强制转化溢出
CleverCode近期遇到一个PHP项目整形转化问题,mysql有一个字段id是bigint的,里面有长整型,如id = 5147486396.可是php代码因为历史原因却部署在多台机器中,当中A机 ...
- 040_字符串连接符 041_条件运算符目 042_运算符优先级_逻辑与或优先问题 043_自动类型转化 044_强制类型转换 045_基本类型常见错误_溢出_L问题
040_字符串连接符 package test_package; /** * 字符串运算符 * @author * */public class TestOperator05 { public sta ...
随机推荐
- Redis学习(4)-数据类型,string,hash
Redis数据类型: redis使用键值对保存数据 key:全部是字符串 value:五种数据类型:string,hash,List,Set,有序的Set集合. key命名:自定义,名字不要过长,否则 ...
- hosts.allow hosts.deny
简单控制访问ip,hosts.allow/hsots.deny a simple access control language that is based on client (host name ...
- 机器学习的敲门砖:手把手教你TensorFlow初级入门
摘要: 在开始使用机器学习算法之前,我们应该首先熟悉如何使用它们. 而本文就是通过对TensorFlow的一些基本特点的介绍,让你了解它是机器学习类库中的一个不错的选择. 本文由北邮@爱可可-爱生活 ...
- Fork me on GitHub
<a href="https://github.com/yadongliang"><img style="position: absolute; top ...
- no !/ in spec
问题: 在学习hibernate的过程中涉及到hibernate.cfg.xml和hibernate.hbm.xml配置文件的编写,写完之后配置文件出现黄色感叹号,鼠标悬停在感叹号上时显示no !/ ...
- 【LeetCode】75. Sort Colors (3 solutions)
Sort Colors Given an array with n objects colored red, white or blue, sort them so that objects of t ...
- ASP.NET MVC下的异步Action的定义和执行原理[转]
http://www.cnblogs.com/artech/archive/2012/06/20/async-action-in-mvc.html Visual Studio提供的Controller ...
- jquery中 $ 和 jQuery 及 $() 的区别
用过jquery的人都知道,jquery有两种用法,一种是$,还有一种是jQuery,那么这两种方式在使用上有什么区别呢? 答案是这两种用法没什么区别,只是别名而已,用$要比jQuery简短一些.方便 ...
- AME_AME审批中子元素的概念和用途(概念)
2014-05-30 Created By BaoXinjian AME: Oracle Approvals Management AME的6个元素的概念和主要作用: Attribue -> ...
- Linux时间子系统(十三) Tick Device layer综述
一.前言 时间子系统中的tick device layer主要涉及kernel/time/tick-*相关的文件,本文的主要内容就是从high level层次(不纠缠在具体的每行代码)描述tick d ...