一、标准的java接口(java.NET)
HttpURLConnection
HttpURLconnection是基于http协议的,支持get,post,put,delete等各种请求方式,最常用的就是get和post。
二、Apache接口(org.apache.http)
HttpClient
private String getUrl = "网址/login.shtml?loginName=xxx&password=xxx";
private String headUrl = "网址/login.shtml";
private final BasicCookieStore cookieStore = new BasicCookieStore();
private HttpResponse getResp;
private HttpResponse postResp;
private HttpClient mHttpClient;
public MyHttpClient( ) {
new Thread(new Runnable() {//get请求数据
@Override
public void run( ) {
mHttpClient = new DefaultHttpClient();
// 保持和服务器登录状态一直是登录着的,必不可少设置全局唯一的Cookie(不了解这步的意图,加不加都可get数据)
((AbstractHttpClient) mHttpClient).setCookieStore(cookieStore);
HttpGet httpGet = new HttpGet(getUrl);
httpGet.addHeader("contentType","application/json");
try {
getResp = mHttpClient.execute(httpGet);
if (getResp.getStatusLine().getStatusCode() == 200) {
String result = EntityUtils.toString(getResp.getEntity());
Log.i(TAG,"get请求结果: " + result);
} else {
Log.i(TAG,"get请求结果: error");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {//post请求数据
@Override
public void run( ) {
mHttpClient = new DefaultHttpClient();
// 保持和服务器登录状态一直是登录着的,必不可少设置全局唯一的Cookie
((AbstractHttpClient) mHttpClient).setCookieStore(cookieStore);
HttpPost httpPost = new HttpPost(getUrl);
httpPost.addHeader("contentType","application/json");
try {
postResp = mHttpClient.execute(httpPost);
if (postResp.getStatusLine().getStatusCode() == 200) {
String result = EntityUtils.toString(postResp.getEntity());
Log.i(TAG,"post请求结果: " + result);
} else {
Log.i(TAG,"post请求结果: error");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {//post请求数据
@Override
public void run( ) {
//创建客户端对象
mHttpClient = new DefaultHttpClient();
//创建post请求对象
HttpPost httpPost = new HttpPost(headUrl);
//封装form表单提交的数据
BasicNameValuePair basicNameValuePair1 = new BasicNameValuePair("loginName","xxx");
BasicNameValuePair basicNameValuePair2 = new BasicNameValuePair("password","xxx");
List<BasicNameValuePair> parameters = new ArrayList<>();
//把BasicNameValuePair放入集合中
parameters.add(basicNameValuePair1);
parameters.add(basicNameValuePair2);
try {
//要提交的数据都已经在集合中了,把集合传给实体对象
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters,"utf-8");
//设置post请求对象的实体,其实就是把要提交的数据封装至post请求的输出流中
httpPost.setEntity(entity);
//3.使用客户端发送post请求
postResp = mHttpClient.execute(httpPost);
if (postResp.getStatusLine().getStatusCode() == 200) {
InputStream result = postResp.getEntity().getContent();
Log.i(TAG,"post请求结果: " + getTextFromStream(result));
} else {
Log.i(TAG,"post请求结果: error");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start()
}
/**
* 字节流转换为字符串
* @param result
* @return
*/
private String getTextFromStream(InputStream result) {
byte[] b = new byte[1024];
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
while ((len = result.read(b)) != -1) {
bos.write(b,0,len);
}
String text = new String(bos.toByteArray());
bos.close();
return text;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
以上是HttpClient的get和post请求数据,简单的三种数据请求,得到的结果相同,在httpClient中post和get请求数据除了HttpPost 和httpGet的对象不同,其余的没有什么差异,不过也能实现上图中get和post的区别表中的特性。
三、Android.net网络接口
就是一个api接口,android自带的接口,常常使用此包下的类进行Android特有的网络编程,如:访问WiFi,访问Android联网信息,邮件等功能。
private Context mContext;
AndroidNet(Context context) {
this.mContext = context;
}
/**
* 确定您是否连入了互联网
* 如果您未连入互联网,则无需安排基于互联网资源的更新。 下面这段代码展示了如何利用 ConnectivityManager 查询活动网络并确定其是否连入了互联网。
* @return true 已连接
*/
private boolean IsNoConnected( ) {
ConnectivityManager cm =
(ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
//是否是wifi
//boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
return isConnected;
}