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

相关文章
|
1天前
|
缓存 移动开发 Android开发
构建高效Android应用:从优化用户体验到提升性能表现
【4月更文挑战第18天】 在移动开发的世界中,打造一个既快速又流畅的Android应用并非易事。本文深入探讨了如何通过一系列创新的技术策略来提升应用性能和用户体验。我们将从用户界面(UI)设计的简约性原则出发,探索响应式布局和Material Design的实践,再深入剖析后台任务处理、内存管理和电池寿命优化的技巧。此外,文中还将讨论最新的Android Jetpack组件如何帮助开发者更高效地构建高质量的应用。此内容不仅适合经验丰富的开发者深化理解,也适合初学者构建起对Android高效开发的基础认识。
2 0
|
1天前
|
移动开发 Android开发 开发者
构建高效Android应用:采用Kotlin进行内存优化的策略
【4月更文挑战第18天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,由于设备和版本的多样性,确保应用流畅运行且占用资源少是一大挑战。本文将探讨使用Kotlin语言开发Android应用时,如何通过内存优化来提升应用性能。我们将从减少不必要的对象创建、合理使用数据结构、避免内存泄漏等方面入手,提供实用的代码示例和最佳实践,帮助开发者构建更加高效的Android应用。
5 0
|
1天前
|
存储 监控 安全
网络安全与信息安全:防范漏洞、应用加密、提升意识
【4月更文挑战第18天】 在数字化时代,网络安全与信息安全保障已成为维护国家安全、企业利益和个人隐私的关键。本文深入探讨网络安全的多面性,包括识别和防御网络漏洞、应用加密技术保护数据以及提升全民网络安全意识的重要性。通过对这些关键领域的分析,文章旨在为读者提供实用的策略和建议,以增强其网络环境的安全防护能力。
4 0
|
2天前
|
数据采集 机器学习/深度学习 数据挖掘
网络数据处理中的NumPy应用实战
【4月更文挑战第17天】本文介绍了NumPy在网络数据处理中的应用,包括数据预处理、流量分析和模式识别。通过使用NumPy进行数据清洗、格式化和聚合,以及处理时间序列数据和计算统计指标,可以有效进行流量分析和异常检测。此外,NumPy还支持相关性分析、周期性检测和聚类分析,助力模式识别。作为强大的科学计算库,NumPy在处理日益增长的网络数据中发挥着不可或缺的作用。
|
3天前
|
缓存 移动开发 Java
构建高效的Android应用:内存优化策略
【4月更文挑战第16天】 在移动开发领域,尤其是针对资源有限的Android设备,内存优化是提升应用性能和用户体验的关键因素。本文将深入探讨Android应用的内存管理机制,分析常见的内存泄漏问题,并提出一系列实用的内存优化技巧。通过这些策略的实施,开发者可以显著减少应用的内存占用,避免不必要的后台服务,以及提高垃圾回收效率,从而延长设备的电池寿命并确保应用的流畅运行。
|
3天前
|
Android开发 开发者
Android网络和数据交互: 请解释Android中的AsyncTask的作用。
Android&#39;s AsyncTask simplifies asynchronous tasks for brief background work, bridging UI and worker threads. It involves execute() for starting tasks, doInBackground() for background execution, publishProgress() for progress updates, and onPostExecute() for returning results to the main thread.
5 0
|
3天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
5 0
|
5天前
|
搜索推荐 开发工具 Android开发
安卓即时应用(Instant Apps)开发指南
【4月更文挑战第14天】Android Instant Apps让用户体验部分应用功能而无需完整下载。开发者需将应用拆分成模块,基于已上线的基础应用构建。使用Android Studio的Instant Apps Feature Library定义模块特性,优化代码与资源以减小模块大小,同步管理即时应用和基础应用的版本。经过测试,可发布至Google Play Console,提升用户便利性,创造新获客机会。
|
6天前
|
Java API 调度
安卓多线程和并发处理:提高应用效率
【4月更文挑战第13天】本文探讨了安卓应用中多线程和并发处理的优化方法,包括使用Thread、AsyncTask、Loader、IntentService、JobScheduler、WorkManager以及线程池。此外,还介绍了RxJava和Kotlin协程作为异步编程工具。理解并恰当运用这些技术能提升应用效率,避免UI卡顿,确保良好用户体验。随着安卓技术发展,更高级的异步处理工具将助力开发者构建高性能应用。
|
6天前
|
编解码 人工智能 测试技术
安卓适配性策略:确保应用在不同设备上的兼容性
【4月更文挑战第13天】本文探讨了提升安卓应用兼容性的策略,包括理解平台碎片化、设计响应式UI(使用dp单位,考虑横竖屏)、利用Android SDK的兼容工具(支持库、资源限定符)、编写兼容性代码(运行时权限、设备特性检查)以及优化性能以适应低端设备。适配性是安卓开发的关键,通过这些方法可确保应用在多样化设备上提供一致体验。未来,自动化测试和AI将助力应对设备碎片化挑战。

热门文章

最新文章

推荐镜像

更多