Android:网络编程及Internet应用

一、通过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 protected]”;

在用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");

你可能感兴趣的:(android,网络)