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

简介:

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


二、实例代码

 

 
  1. public class MainActivity extends Activity  
  2. {  
  3.  private EditText txtPath;  
  4.  private Button btnShowHtml;  
  5.  private TextView txtViewHtml;  
  6.    
  7.  @Override 
  8.  public void onCreate(Bundle savedInstanceState)  
  9.  {  
  10.   super.onCreate(savedInstanceState);  
  11.   setContentView(R.layout.main);  
  12.   txtPath = (EditText)this.findViewById(R.id.txtPath);  
  13.   btnShowHtml = (Button)this.findViewById(R.id.btnShowHtml);  
  14.   txtViewHtml = (TextView)this.findViewById(R.id.txtViewHtml);  
  15.   btnShowHtml.setOnClickListener(new ShowHtmlListener());  
  16.  }  
  17.    
  18.  private final class ShowHtmlListener implements View.OnClickListener  
  19.  {  
  20.   @Override 
  21.   public void onClick(View v)  
  22.   {  
  23.    String path = txtPath.getText().toString();  
  24.    try 
  25.    {  
  26.     String html = HtmlService.getHtml(path);  
  27.     txtViewHtml.setText(html);  
  28.    }  
  29.    catch (Exception e)  
  30.    {  
  31.     Toast.makeText(MainActivity.this"获取网页元素失败", Toast.LENGTH_SHORT).show();  
  32.    }  
  33.   }   
  34.  }  
  35. }  
  36.  
  37.  
  38. package cn.xy.html.service;  
  39. import java.io.InputStream;  
  40. import java.net.HttpURLConnection;  
  41. import java.net.URL;  
  42. import cn.xy.html.util.IOUtils;  
  43. /**  
  44.  * Html获取业务类  
  45.  * @author 徐越  
  46.  */ 
  47. public class HtmlService  
  48. {  
  49.  /**  
  50.   * 获取网页html源代码  
  51.   * @param path  
  52.   * @return  
  53.   */ 
  54.  public static String getHtml(String path) throws Exception  
  55.  {  
  56.   String html = "";  
  57.   // 把路径包装成URL对象  
  58.   URL url = new path);  
  59.   // 基于http协议的连接对象  
  60.   HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  61.   // 超时时间5s  
  62.   conn.setReadTimeout(5000);  
  63.   // 获取传输方式  
  64.   conn.setRequestMethod("GET");  
  65.   // 若响应码为200说明请求成功  
  66.   if(200 == conn.getResponseCode())  
  67.   {  
  68.    InputStream instream = conn.getInputStream();  
  69.    byte[] data = IOUtils.read(instream);  
  70.    // 真实情况是读出请求头的charset值  
  71.    html = new String(data,"UTF-8");   
  72.   }  
  73.   return html;  
  74.  }  
  75. }  
  76.  
  77.  
  78. package cn.xy.html.util;  
  79. import java.io.ByteArrayOutputStream;  
  80. import java.io.IOException;  
  81. import java.io.InputStream;  
  82. /**  
  83.  * IO操作工具类  
  84.  * @author 徐越  
  85.  */ 
  86. public class IOUtils  
  87. {  
  88.  /**  
  89.   * 获取输入流的方法  
  90.   */ 
  91.  public static byte[] read(InputStream instream) throws IOException  
  92.  {  
  93.   ByteArrayOutputStream bos = new ByteArrayOutputStream();  
  94.   byte[] buffer = new byte[1024];  
  95.   int len = 0;  
  96.   while ((len = instream.read(buffer)) != -1)  
  97.   {  
  98.    bos.write(buffer, 0, len);  
  99.   }  
  100.   return bos.toByteArray();  
  101.  }  

 

 
  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. <ScrollView android: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-permission android:name="android.permission.INTERNET" /> 


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

本文转自IT徐胖子的专栏博客51CTO博客,原文链接http://blog.51cto.com/woshixy/1087182如需转载请自行联系原作者


woshixuye111

相关文章
|
3天前
|
安全 网络安全 数据安全/隐私保护
访问控制列表(ACL)是网络安全中的一种重要机制,用于定义和管理对网络资源的访问权限
访问控制列表(ACL)是网络安全中的一种重要机制,用于定义和管理对网络资源的访问权限。它通过设置一系列规则,控制谁可以访问特定资源、在什么条件下访问以及可以执行哪些操作。ACL 可以应用于路由器、防火墙等设备,分为标准、扩展、基于时间和基于用户等多种类型,广泛用于企业网络和互联网中,以增强安全性和精细管理。
25 7
|
3天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
5天前
|
SQL 安全 前端开发
PHP与现代Web开发:构建高效的网络应用
【10月更文挑战第37天】在数字化时代,PHP作为一门强大的服务器端脚本语言,持续影响着Web开发的面貌。本文将深入探讨PHP在现代Web开发中的角色,包括其核心优势、面临的挑战以及如何利用PHP构建高效、安全的网络应用。通过具体代码示例和最佳实践的分享,旨在为开发者提供实用指南,帮助他们在不断变化的技术环境中保持竞争力。
RS-485网络中的标准端接与交流电端接应用解析
RS-485,作为一种广泛应用的差分信号传输标准,因其传输距离远、抗干扰能力强、支持多点通讯等优点,在工业自动化、智能建筑、交通运输等领域得到了广泛应用。在构建RS-485网络时,端接技术扮演着至关重要的角色,它直接影响到网络的信号完整性、稳定性和通信质量。
|
5天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
6天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第36天】探索卷积神经网络(CNN)的神秘面纱,揭示其在图像识别领域的威力。本文将带你了解CNN的核心概念,并通过实际代码示例,展示如何构建和训练一个简单的CNN模型。无论你是深度学习的初学者还是希望深化理解,这篇文章都将为你提供有价值的见解。
|
5天前
|
存储 API 开发工具
探索安卓开发:从基础到进阶
【10月更文挑战第37天】在这篇文章中,我们将一起探索安卓开发的奥秘。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和建议。我们将从安卓开发的基础开始,逐步深入到更复杂的主题,如自定义组件、性能优化等。最后,我们将通过一个代码示例来展示如何实现一个简单的安卓应用。让我们一起开始吧!
|
6天前
|
存储 XML JSON
探索安卓开发:从新手到专家的旅程
【10月更文挑战第36天】在这篇文章中,我们将一起踏上一段激动人心的旅程,从零基础开始,逐步深入安卓开发的奥秘。无论你是编程新手,还是希望扩展技能的老手,这里都有适合你的知识宝藏等待发掘。通过实际的代码示例和深入浅出的解释,我们将解锁安卓开发的关键技能,让你能够构建自己的应用程序,甚至贡献于开源社区。准备好了吗?让我们开始吧!
18 2
|
6天前
|
数据可视化 算法 安全
员工上网行为管理软件:S - PLUS 在网络统计分析中的应用
在数字化办公环境中,S-PLUS 员工上网行为管理软件通过精准的数据收集、深入的流量分析和直观的可视化呈现,有效帮助企业管理员工上网行为,保障网络安全和提高运营效率。
16 1
|
6月前
|
存储 Java 开发工具
Android开发的技术与开发流程
Android开发的技术与开发流程
399 1