第10章 看看精彩的世界,使用网络技术
1. Android提供了一个_______________________控件,借助它可以在应用程序里嵌入一个浏览器,从而展示网页。 答: WebView
2. 请根据下面程序中注释,在空白划线处填写代码。 // 从布局中取得WebView组件R.id.web_view
webView =(1)________________________________;
// 取得webView对象的设置集,设置为允许运行网页中JavaScript程序 (2)________________________________; // 为webView设置一个新建的客户端
(3)________________________________ { @Override // 实现WebViewClient的shouldOverrideUrlLoading(),为WebView对象接收url public boolean (4)_______________________________________{ // 根据传入的url再去加载网页 view.loadUrl(url); // 返回true,表示当前WebView可以处理打开新网页的请求,不用借助系统浏览器 return true; } });
// 调用webView对象的loadUrl()方法,加载url为“http://www.http://www.35331.cn/”的网页 (5)_______________________________________; 答:
(1)(WebView) findViewById(R.id.web_view)
(2)webView.getSettings().setJavaScriptEnabled(true) (3)webView.setWebViewClient(new WebViewClient() (4)shouldOverrideUrlLoading(WebView view, String url) (5)webView.loadUrl(\
3. 使用_______________________协议访问网络可以让开发人员完全控制发送HTTP请求、接收服务响应、解析返回数据,以及最终显示内容整个过程。 答: HTTP
4. Android平台开发HTTP网络连接主要有两个途径,即使用由Android SDK自主开发的HTTP网络连接开发包提供的_______________________类,或使用Apache旗下的开源项目_______________________。 答:
HttpURLConnection HttpClient
5. HTTP网络连接设置HTTP请求方式,主要有两个:_______________________和_______________________。 答: GET POST
6. 下面是一段HTTP网线连接程序片断,请认真阅读后说明其编程逻辑。 private Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case SHOW_RESPONSE: String response = (String) msg.obj; // 将收到的网页字符串response显示在TextView中 responseText.setText(response); } } }; …… private void sendRequestWithHttpClient() { new Thread(new Runnable() { @Override public void run() { try { HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(\ HttpResponse httpResponse = httpClient.execute(httpGet); if (httpResponse.getStatusLine().getStatusCode() == 200) { HttpEntity entity = httpResponse.getEntity(); String response = EntityUtils.toString(entity, \ Message message = new Message(); message.what = SHOW_RESPONSE; message.obj = response.toString(); handler.sendMessage(message); } } catch (Exception e) { e.printStackTrace(); } } }).start(); } 答:
(1)首先, 在UI主线程中创建Handler类对象handler,并实现其HandleMessage()方法,让该方法接收
并处理Message消息对象,根据消息对象的what字段判断出消息来源后,再从消息对象中提取obj字段内容,并将内容显示到界面中。
(2)另外,程序中还建立一个进行网络连接的后台线程并启动它;
(3)在后台线程里,建一个DefaultHttpClient类的对象httpClient作为HTTP客户端对象; (4)又建一个HTTP GET请求对象httpGet,设置请求网址为“www.jssvc.edu.cn”;
(5)接着,调用httpClient对象的execute()方法执行HTTP GET请求,并将服务器返回的数据保存到HttpResponse类的 httpResponse对象中;
(6)调用httpResponse对象的getStatusLine()方法取得状态行,再链式调用getStatusCode()从状态行取得状态码,如果等于200,那么执行下面操作;
(7)从httpResponse对象中取得响应实体并保存到HttpEntity类的entity对象中,调用EntityUtils类的静态方法toString()将响应实体转换成“utf-8”编码字符串,并保存到字符串变量response中; (8)建一个Message类对象message,将message的what字段值设置为表示消息来源的常量,再将response对象转换成字符串并保存到message的obj字段,调用handler的sendMessage()方法将message对象发送给UI主线程。
7. 下面是使用HttpURLConnection连接网络程序片断,请根据注释提示在空白划线处填写相应代码。 new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection = null; try { // 新建一个连接到“http://www.jssvc.edu.cn”的URL类对象url (1)________________________________________; // 打开url对象的网络连接,并保存到connection (2)________________________________________; // 将connection连接请求方式设置为GET (3)________________________________________; connection.setConnectTimeout(8000); connection.setReadTimeout(8000); connection.setDoInput(true); connection.setDoOutput(true); // 取得connection连接的输入流InputStream对象,并保存到in中
(4)________________________________________;
BufferedReader reader =(5)_________________ (//封装成BufferedReader类对象reader (6)___________________);// 将in转换成InputStreamReader对象 StringBuilder response = new StringBuilder();// 新建字符串组装器 String line; // while循环,逐行读取输入流中数据,直到输入流为null (7)_______________________________{ response.append(line); } Message message =(8)___________________;// 创建Message类的对象message message.what = SHOW_RESPONSE;// 设置message对象的发送者签名 message.obj = response.toString();// message对象携带的信息