PS:在manifest里面添加INTERNET权限
下面简单的说一下Get和Post方式之间的区别
1. 从文字意义上说:Get是从服务器上面获取数据,而Post是从服务器上传递数据
2. http如果没有在setRequestMethod(“POST”)的话,默认是Get方式的,而setRequestMethod()里面的参数只要有以下几种
/**
* The subset of HTTP methods that the user may select via {@link
* #setRequestMethod(String)}.
*/
private static final String[] PERMITTED_USER_METHODS = {
“OPTIONS”,
“GET”,
“HEAD”,
“POST”,
“PUT”,
“DELETE”,
“TRACE”
// Note: we don’t allow users to specify “CONNECT”
};
3. Get方式获取数据是将参数拼接到Url地址上面,而Post方式则是写进Connection里面,相对Get方式比较安全
4. Get方式传递数据量有限,最多2Kb,而Post理论上无限制,其实也就100K左右
5. 相对执行效率,Get方式较快
总结:如果是做数据查询,用Get方式,如果是机密方式或者数据增删改就用Post
以下是两个使用http的Post和Get方式获取网络数据的Demo
1. 使用httpGet读取网络数据
由于android4.0之后,网络耗时操作需要在后台操作!所以需要用到AsyncTask异步操作!
String url =”http://www.baidu.com”;
new AsyncTask<String, Void, Void>() {
@Override
protected Void doInBackground(String… params) {
try {
//通过URl获取到访问地址
URL url = new URL(params[0]);
//获取到链接的Connection资源
URLConnection connection = url.openConnection();
//通过connection获取数据流,并将获得的字节流数据转成字符流
InputStream ins = connection.getInputStream();
InputStreamReader insReader = new InputStreamReader(ins);
//将获得的字符流数据转化成更容易处理的字符输入流
BufferedReader br = new BufferedReader(insReader);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
//最后关闭流处理
br.close();
insReader.close();
ins.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}.execute(url);
2. 使用httpPost读取网络数据
//HttpPost方式
public void onBtnPost(View view) {
new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String… params) {
StringBuffer sb = new StringBuffer();
try {
//通过URl获取到访问地址
URL url = new URL(params[0]);
//获取到链接的Connection资源
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod(“POST”);
OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream(), “utf-8”);
BufferedWriter bw = new BufferedWriter(osw);
bw.write(“keyfrom=testMarco&key=1197299496&type=data&doctype=json&version=1.1&q=good”);
bw.flush();
//通过connection获取数据流,并将获得的字节流数据转成字符流
InputStream ins = connection.getInputStream();
InputStreamReader insReader = new InputStreamReader(ins);
//将获得的字符流数据转化成更容易处理的字符输入流
BufferedReader br = new BufferedReader(insReader);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
sb.append(line);
}
//最后关闭流处理
br.close();
insReader.close();
ins.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (TextUtils.isEmpty(sb.toString().trim())) {
return “result null”;
} else {
return sb.toString();
}
}
@Override
protected void onPostExecute(String s) {
tvContent.setText(“post” + s);
}
}.execute(“http://fanyi.youdao.com/openapi.do”);
}