Android开发16――获取网络资源之基础应用


一、项目背景
在Android开发中有一项非常广泛的应用:Android项目获取另一个web项目的资源或者返回的数据。本博文介绍了获取另一个web项目的资源。有一个web项目,在其WebRoot文件夹下有一个静态页面test.html。现有一个Android项目要获取到该页面的html代码显示在TextView中。


二、实例代码


 
 
  1. publicclass MainActivity extends Activity  

  2. {  

  3. private EditText txtPath;  

  4. private Button btnShowHtml;  

  5. private TextView txtViewHtml;  

  6. @Override

  7. publicvoid onCreate(Bundle savedInstanceState)  

  8. {  

  9. super.onCreate(savedInstanceState);  

  10.  setContentView(R.layout.main);  

  11.  txtPath = (EditText)this.findViewById(R.id.txtPath);  

  12.  btnShowHtml = (Button)this.findViewById(R.id.btnShowHtml);  

  13.  txtViewHtml = (TextView)this.findViewById(R.id.txtViewHtml);  

  14.  btnShowHtml.setOnClickListener(new ShowHtmlListener());  

  15. }  

  16. privatefinalclass ShowHtmlListener implements View.OnClickListener  

  17. {  

  18. @Override

  19. publicvoid onClick(View v)  

  20.  {  

  21.   String path = txtPath.getText().toString();  

  22. try

  23.   {  

  24.    String html = HtmlService.getHtml(path);  

  25.    txtViewHtml.setText(html);  

  26.   }  

  27. catch (Exception e)  

  28.   {  

  29.    Toast.makeText(MainActivity.this, "获取网页元素失败", Toast.LENGTH_SHORT).show();  

  30.   }  

  31.  }  

  32. }  

  33. }  

  34. package cn.xy.html.service;  

  35. import java.io.InputStream;  

  36. import java.net.HttpURLConnection;  

  37. import java.net.URL;  

  38. import cn.xy.html.util.IOUtils;  

  39. /**

  40. * Html获取业务类

  41. * @author 徐越

  42. */

  43. publicclass HtmlService  

  44. {  

  45. /**

  46.  * 获取网页html源代码

  47.  * @param path

  48.  * @return

  49.  */

  50. publicstatic String getHtml(String path) throws Exception  

  51. {  

  52.  String html = "";  

  53. // 把路径包装成URL对象

  54.  URL url = new path);  

  55. // 基于http协议的连接对象

  56.  HttpURLConnection conn = (HttpURLConnection) url.openConnection();  

  57. // 超时时间5s

  58.  conn.setReadTimeout(5000);  

  59. // 获取传输方式

  60.  conn.setRequestMethod("GET");  

  61. // 若响应码为200说明请求成功

  62. if(200 == conn.getResponseCode())  

  63.  {  

  64.   InputStream instream = conn.getInputStream();  

  65. byte[] data = IOUtils.read(instream);  

  66. // 真实情况是读出请求头的charset值

  67.   html = new String(data,"UTF-8");  

  68.  }  

  69. return html;  

  70. }  

  71. }  

  72. package cn.xy.html.util;  

  73. import java.io.ByteArrayOutputStream;  

  74. import java.io.IOException;  

  75. import java.io.InputStream;  

  76. /**

  77. * IO操作工具类

  78. * @author 徐越

  79. */

  80. publicclass IOUtils  

  81. {  

  82. /**

  83.  * 获取输入流的方法

  84.  */

  85. publicstaticbyte[] read(InputStream instream) throws IOException  

  86. {  

  87.  ByteArrayOutputStream bos = new ByteArrayOutputStream();  

  88. byte[] buffer = newbyte[1024];  

  89. int len = 0;  

  90. while ((len = instream.read(buffer)) != -1)  

  91.  {  

  92.   bos.write(buffer, 0, len);  

  93.  }  

  94. return bos.toByteArray();  

  95. }  

  96. }


 
 
  1. <TextView

  2. android:layout_width="fill_parent"

  3. android:layout_height="wrap_content"

  4. android:text="网络页面路径"

  5. />

  6. <!-- 网址输入不能使localhost或127.0.0.1 -->

  7. <!-- 因为android是一个操作系统,输入localhost或127.0.0.1会到本操作系统下去找某web应用,所以要使用局域网的ip -->

  8. <EditText

  9. android:layout_width="fill_parent"

  10. android:layout_height="wrap_content"

  11. android:id="@+id/txtPath"

  12. android:text="http://xxx.xxx.xxx.xxx:8080/ad_20_web/test.html"

  13. />

  14. <Button

  15. android:layout_width="wrap_content"

  16. android:layout_height="wrap_content"

  17. android:text="获取html"

  18. android:id="@+id/btnShowHtml"

  19. />

  20. <ScrollViewandroid:layout_width="wrap_content"android:layout_height="wrap_content">

  21. <TextView

  22. android:layout_width="fill_parent"

  23. android:layout_height="wrap_content"

  24. android:id="@+id/txtViewHtml"/>

  25. </ScrollView>

ScrollView标签为TextView增加滚动条。

当然不能忘记访问网络需要权限

 
 
  1. <!-- 访问网络权限 -->

  2. <uses-permissionandroid:name="android.permission.INTERNET"/>


三、总结
HtmlService中的方法其实可以获取任意类型的数据,因为其中一个环节是获取了byte[],拿到这个字节数组后我们可以根据不同类型的数据进行不同的操作。比如拿到一个图片byte[],就需要使用Bitmap工厂将其转化为Bitmap然后赋给ImageView控件。所以我们要熟悉获取网络资源的一般步骤。

本文出自 “IT徐胖子的专栏” 博客,请务必保留此出处http://woshixy.blog.51cto.com/5637578/1087182


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