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

相关文章
|
23天前
|
Kubernetes 安全 Devops
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
53 10
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
|
2天前
|
数据采集 JavaScript 前端开发
异步请求在TypeScript网络爬虫中的应用
异步请求在TypeScript网络爬虫中的应用
|
6天前
|
容灾 网络协议 数据库
云卓越架构:云上网络稳定性建设和应用稳定性治理最佳实践
本文介绍了云上网络稳定性体系建设的关键内容,包括面向失败的架构设计、可观测性与应急恢复、客户案例及阿里巴巴的核心电商架构演进。首先强调了网络稳定性的挑战及其应对策略,如责任共担模型和冗余设计。接着详细探讨了多可用区部署、弹性架构规划及跨地域容灾设计的最佳实践,特别是阿里云的产品和技术如何助力实现高可用性和快速故障恢复。最后通过具体案例展示了秒级故障转移的效果,以及同城多活架构下的实际应用。这些措施共同确保了业务在面对网络故障时的持续稳定运行。
|
28天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
53 19
|
28天前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
56 14
|
27天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
28天前
|
搜索推荐 前端开发 测试技术
打造个性化安卓应用:从设计到开发的全面指南
在这个数字时代,拥有一个定制的移动应用不仅是一种趋势,更是个人或企业品牌的重要延伸。本文将引导你通过一系列简单易懂的步骤,从构思你的应用理念开始,直至实现一个功能齐全的安卓应用。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你提供必要的工具和知识,帮助你将创意转化为现实。
|
8月前
|
存储 Java 开发工具
Android开发的技术与开发流程
Android开发的技术与开发流程
414 1
|
5月前
|
安全 Android开发 Swift
安卓与iOS开发:平台差异与技术选择
【8月更文挑战第26天】 在移动应用开发的广阔天地中,安卓和iOS两大平台各占一方。本文旨在探索这两个系统在开发过程中的不同之处,并分析开发者如何根据项目需求选择合适的技术栈。通过深入浅出的对比,我们将揭示各自平台的优势与挑战,帮助开发者做出更明智的决策。
80 5
|
5月前
|
移动开发 搜索推荐 Android开发
安卓与iOS开发:一场跨平台的技术角逐
在移动开发的广阔舞台上,两大主角——安卓和iOS,持续上演着激烈的技术角逐。本文将深入浅出地探讨这两个平台的开发环境、工具和未来趋势,旨在为开发者揭示跨平台开发的秘密,同时激发读者对技术进步的思考和对未来的期待。