一、通过HTTP访问网络
1、使用HttpURLConnection访问网络
URL url = new URL(sourceUrl);
HttpURLConnection urlConn =(HttpURLConnection)url.openConnection();
这只是创建了一个对象,并没有真正执行连接。
创建对象后就可以发送HTTP请求了。
(1)发送GET请求
使用HttpURLConnection发送请求时,默认GET。因此,只要在连接地址后面通过参数传递
String sourceUrl = “http://xxx.jsp?user=wgh,email=15311@qq.com”;
在用GET传递中文参数时会产生乱码,因此需要进行Base64编码来解决乱码问题
public String base64(String content){
try {
content= Base64.encodeToString(content.getBytes("utf-8"), Base64.DEFAULT);
content= URLEncoder.encode(content, StandardCharsets.UTF_8.toString());
}catch (UnsupportedEncodingException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
returncontent;
}
当然,也可以用Java的URLEncoder来实现
(2)发送POST请求
GET方式只适合大小在1024字节以内的数据,当要发送的数据较大时,就需要使用POST方式来发送
HttpURLConnection urlConn =(HttpURLConnection)url.openConnection();
urlConn.setRequestMethod(“POST”);
发送POST请求要复杂一些,需要设置如下参数:
setDoInput(true);
setDoOutput(true);
setUseCaches(false);
setInstanceFollowRedirects(true);//自动执行Http重定向
//设置内容类型是表单数据
setRequestProperty(“Content-Type”, “application/x-www-form-urlencoded”);
2、使用HttpClient访问网络
HttpClient实际上是对Java访问网络的封装。HttpURLConnection类中的输入/输出流操作,在HttpClient中同一封装成HttpGet、HttpPost、HttpResponse。注意比较两种方法的红色部分
(1)发送GET请求
String target = "http://xxx.jsp?params=get";
HttpClient httpclient = new DefaultHttpClient();//创建HttpClient对象
HttpGet httpget = new HttpGet(target);//创建HttpGet对象
//httpget.setParams(params);
try {
HttpResponsehttpresponse = httpclient.execute(httpget);//发送请求
httpresponse.getEntity();//获取服务器的响应内容
}catch (ClientProtocolException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
(2)发送POST请求
String target = "http://xxx.jsp?params=get";
HttpClient httpclient = new DefaultHttpClient();//创建HttpClient对象
HttpPost httppost = newHttpPost(target);//创建HttpGet对象
//httppost.setParams(params);
//设置编码方式
//httppost.setEntity((HttpEntity) newUrlEncodedFormEntity(params, "utf-8"));
try {
HttpResponsehttpresponse = httpclient.execute(httppost);//发送请求
httpresponse.getEntity();//获取服务器的响应内容
}catch (ClientProtocolException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
二、使用WebView显示网页
1.使用WebView浏览网页
WebView wv = (WebView)findViewById(R.id.webView1);
wv.loadUrl("http://www.baidu.com");//必须要有http,不然加载不了
//支持放大和缩小功能
//wv.getSettings().setSupportZoom(true);
//wv.getSettings().setBuiltInZoomControls(true);
同时还支持以下方法:
loadUrl(String url)
loadData(String data, String mimeType,String encoding) 把指定字符串数据记载到浏览器中
loadDataWithBaseURL(String baseUrl, Stringdata, String mimeType, String encoding, String historyUrl) 用于基于URL加载指定的数据
capturePicture() 创建屏幕快照
goBack() 后退,相当于浏览器的后退按钮
goForward() 前进,相当于浏览器的前进按钮
stopLoading()
reload()
2.使用WebView加载HTML代码
进行游戏开发时,使用HTML代码进行显示比较实用。使用loadData()加载中文html会产生乱码,但使用loadDataWithBaseURL()就不会出现这种情况
loadDataWithBaseURL(String baseUrl, Stringdata, String mimeType, String encoding, String historyUrl)
baseUrl:用于指定当前页面的url。如果为null,则使用about:blank,即空白页
data:用于要显示的字符串数据
mimeType:指定要显示的MIME类型,如果为null,则使用默认的text/html
encoding:用于指定数据编码方式
historyUrl:用于指定进入当前页面之前的url。如果为null,则使用about:blank,即空白页
示例:
WebView wv = (WebView)findViewById(R.id.webView1);
StringBuilder sb = new StringBuilder();
sb.append("你好!");
wv.loadDataWithBaseURL(null, sb.toString(), "text/html","utf-8", null);
3.让WebView支持JavaScript
wv = (WebView)findViewById(R.id.webView1);
wv.getSettings().setJavaScriptEnabled(true);
wv.setWebChromeClient(newWebChromeClient());//处理JavaScript对话框
wv.setWebViewClient(newWebViewClient());//不能省。省略将使用默认浏览器
CheckBox check = (CheckBox)findViewById(R.id.checkBox1);
check.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
publicvoid onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//TODO Auto-generated method stub
if(isChecked){
wv.loadUrl("https://www.baidu.com");
}else{
wv.loadUrl("http://www.sina.com.cn");
}
}
});
wv.loadUrl("http://www.qq.com");