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

相关文章
|
4天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
22小时前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。
|
1天前
|
移动开发 Java Android开发
构建高效Android应用:采用Kotlin协程优化网络请求
【4月更文挑战第24天】 在移动开发领域,尤其是对于Android平台而言,网络请求是一个不可或缺的功能。然而,随着用户对应用响应速度和稳定性要求的不断提高,传统的异步处理方式如回调地狱和RxJava已逐渐显示出局限性。本文将探讨如何利用Kotlin协程来简化异步代码,提升网络请求的效率和可读性。我们将深入分析协程的原理,并通过一个实际案例展示如何在Android应用中集成和优化网络请求。
|
1天前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin协程的优势与实践
【4月更文挑战第24天】随着移动开发技术的不断演进,提升应用性能和用户体验已成为开发者的核心任务。在Android平台上,Kotlin语言凭借其简洁性和功能性成为主流选择之一。特别是Kotlin的协程功能,它为异步编程提供了一种轻量级的解决方案,使得处理并发任务更加高效和简洁。本文将深入探讨Kotlin协程在Android开发中的应用,通过实际案例分析协程如何优化应用性能,以及如何在项目中实现协程。
|
2天前
|
存储 缓存 安全
Android系统 应用存储路径与权限
Android系统 应用存储路径与权限
6 0
Android系统 应用存储路径与权限
|
2天前
|
存储 安全 Android开发
Android系统 自定义系统和应用权限
Android系统 自定义系统和应用权限
16 0
|
7天前
|
缓存 移动开发 Android开发
构建高效Android应用:从优化用户体验到提升性能表现
【4月更文挑战第18天】 在移动开发的世界中,打造一个既快速又流畅的Android应用并非易事。本文深入探讨了如何通过一系列创新的技术策略来提升应用性能和用户体验。我们将从用户界面(UI)设计的简约性原则出发,探索响应式布局和Material Design的实践,再深入剖析后台任务处理、内存管理和电池寿命优化的技巧。此外,文中还将讨论最新的Android Jetpack组件如何帮助开发者更高效地构建高质量的应用。此内容不仅适合经验丰富的开发者深化理解,也适合初学者构建起对Android高效开发的基础认识。
5 0
|
7天前
|
移动开发 Android开发 开发者
构建高效Android应用:采用Kotlin进行内存优化的策略
【4月更文挑战第18天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,由于设备和版本的多样性,确保应用流畅运行且占用资源少是一大挑战。本文将探讨使用Kotlin语言开发Android应用时,如何通过内存优化来提升应用性能。我们将从减少不必要的对象创建、合理使用数据结构、避免内存泄漏等方面入手,提供实用的代码示例和最佳实践,帮助开发者构建更加高效的Android应用。
11 0
|
7天前
|
存储 监控 安全
网络安全与信息安全:防范漏洞、应用加密、提升意识
【4月更文挑战第18天】 在数字化时代,网络安全与信息安全保障已成为维护国家安全、企业利益和个人隐私的关键。本文深入探讨网络安全的多面性,包括识别和防御网络漏洞、应用加密技术保护数据以及提升全民网络安全意识的重要性。通过对这些关键领域的分析,文章旨在为读者提供实用的策略和建议,以增强其网络环境的安全防护能力。
10 0
|
8天前
|
数据采集 机器学习/深度学习 数据挖掘
网络数据处理中的NumPy应用实战
【4月更文挑战第17天】本文介绍了NumPy在网络数据处理中的应用,包括数据预处理、流量分析和模式识别。通过使用NumPy进行数据清洗、格式化和聚合,以及处理时间序列数据和计算统计指标,可以有效进行流量分析和异常检测。此外,NumPy还支持相关性分析、周期性检测和聚类分析,助力模式识别。作为强大的科学计算库,NumPy在处理日益增长的网络数据中发挥着不可或缺的作用。

推荐镜像

更多