【android基础】之Android获取网络上的图片结合ImageView的简单应用

简介: 网络的访问在我们日常生活中太重要了,如果没有网络我们的生活将会是什么样子呢?android手机和浏览器也是一样的,也可以通过网络通讯获取数据,如调用webservice,EJB等。

网络的访问在我们日常生活中太重要了,如果没有网络我们的生活将会是什么样子呢?android手机和浏览器也是一样的,也可以通过网络通讯获取数据,如调用webservice,EJB等。下面就通过一个小例子从网络获取一幅图片并显示在手机上,开发中将会使用到一个新的组件ImageView.

1.写一个用来处理字节流的工具类


package org.lxh.util;  
  1.   
  2. import java.io.ByteArrayOutputStream;  
  3. import java.io.InputStream;  
  4.   
  5. public class StreamTool {  
  6.     public static byte[] readInputStream(InputStream in) throws Exception{  
  7.         int len=0;  
  8.         byte buf[]=new byte[1024];  
  9.         ByteArrayOutputStream out=new ByteArrayOutputStream();  
  10.         while((len=in.read(buf))!=-1){  
  11.             out.write(buf,0,len);  //把数据写入内存   
  12.         }  
  13.         out.close();  //关闭内存输出流   
  14.         return out.toByteArray(); //把内存输出流转换成byte数组   
  15.     }  
  16.   
  17. }  

2.写一个得到图片byte数组的service类


package org.lxh.service;  
  1.   
  2. import java.io.ByteArrayOutputStream;  
  3. import java.io.File;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.net.HttpURLConnection;  
  8. import java.net.MalformedURLException;  
  9. import java.net.URL;  
  10.   
  11. import org.lxh.util.StreamTool;  
  12.   
  13. import android.util.Log;  
  14.   
  15. public class WebService {  
  16.     public static byte[] getImage(String path){  
  17.           
  18.         URL url;  
  19.         byte[] b=null;  
  20.         try {  
  21.             url = new URL(path);   //设置URL   
  22.             HttpURLConnection con;  
  23.               
  24.             con = (HttpURLConnection)url.openConnection();  //打开连接   
  25.           
  26.             con.setRequestMethod("GET"); //设置请求方法   
  27.             //设置连接超时时间为5s   
  28.             con.setConnectTimeout(5000);  
  29.             InputStream in=con.getInputStream();  //取得字节输入流   
  30.           
  31.             b=StreamTool.readInputStream(in);  
  32.               
  33.         } catch (Exception e) {  
  34.               
  35.             e.printStackTrace();  
  36.         }  
  37.         return b;  //返回byte数组   
  38.           
  39.     }  
  40.       
  41. }  

3.写一个用户操作界面


<?xml version="1.0" encoding="utf-8"?>  
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:orientation="vertical"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     >  
  6. <TextView    
  7.     android:layout_width="fill_parent"   
  8.     android:layout_height="wrap_content"   
  9.     android:text="@string/hello"  
  10.     />  
  11.     <TextView    
  12.     android:layout_width="fill_parent"   
  13.     android:layout_height="wrap_content"   
  14.     android:text="@string/picaddress"  
  15.     />  
  16.     <EditText  
  17.     android:layout_width="wrap_content"   
  18.     android:layout_height="wrap_content"   
  19.     android:text="http://www.desk9.com/Desk9Image/21/Desk9_21_1690_35790_S.jpg"  
  20.     android:id="@+id/imageaddress"  
  21.     />  
  22.     <Button  
  23.      android:layout_width="wrap_content"   
  24.     android:layout_height="wrap_content"   
  25.     android:text="@string/look"  
  26.     android:id="@+id/button"  
  27.     />  
  28.     <ImageView  
  29.      android:layout_width="fill_parent"   
  30.     android:layout_height="fill_parent"   
  31.     android:id="@+id/image"/>  
  32. </LinearLayout>  


4.写一个activity类

package org.lxh.net;  

  1.   
  2. import org.lxh.service.WebService;  
  3.   
  4. import android.app.Activity;  
  5. import android.graphics.Bitmap;  
  6. import android.graphics.BitmapFactory;  
  7. import android.os.Bundle;  
  8. import android.util.Log;  
  9. import android.view.View;  
  10. import android.widget.Button;  
  11. import android.widget.EditText;  
  12. import android.widget.ImageView;  
  13. import android.widget.Toast;  
  14.   
  15. public class NetActivity extends Activity {  
  16.    private EditText picaddress;  
  17.    private Button button;  
  18.    private ImageView imageView;  
  19.     public void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.main);  
  22.         button=(Button)this.findViewById(R.id.button);  
  23.         imageView=(ImageView)this.findViewById(R.id.image);  
  24.         picaddress=(EditText)this.findViewById(R.id.imageaddress);  
  25.         button.setOnClickListener(new View.OnClickListener() {  
  26.               
  27.             public void onClick(View v) {  
  28.                 String address=picaddress.getText().toString();  
  29.                   
  30.                 try {  
  31.                   
  32.                     byte[] data=WebService.getImage(address); //得到图片的输入流   
  33.                       
  34.                     //二进制数据生成位图   
  35.                     Bitmap bit=BitmapFactory.decodeByteArray(data, 0, data.length);  
  36.                       
  37.                     imageView.setImageBitmap(bit);  
  38.                   
  39.                 } catch (Exception e) {  
  40.                     Log.e("NetActivity", e.toString());  
  41.                       
  42.                     Toast.makeText(NetActivity.this, R.string.error, 1).show();  
  43.                 }  
  44.             }  
  45.         });  
  46.     }  
  47. }  

5.添加网络访问的权限

<?xml version="1.0" encoding="utf-8"?>  
  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  2.       package="org.lxh.net"  
  3.       android:versionCode="1"  
  4.       android:versionName="1.0">  
  5.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  6.         <activity android:name=".NetActivity"  
  7.                   android:label="@string/app_name">  
  8.             <intent-filter>  
  9.                 <action android:name="android.intent.action.MAIN" />  
  10.                 <category android:name="android.intent.category.LAUNCHER" />  
  11.             </intent-filter>  
  12.         </activity>  
  13.   
  14.     </application>  
  15.     <uses-sdk android:minSdkVersion="7" />  
  16.   
  17.     <uses-permission android:name="android.permission.INTERNET"/>  
  18. </manifest>   

6.这里把strings.xml文件也贴出来


<?xml version="1.0" encoding="utf-8"?>  

  1. <resources>  
  2.     <string name="hello">Hello World, NetActivity!</string>  
  3.     <string name="app_name">图片查看</string>  
  4.     <string name="picaddress">图片地址</string>  
  5.     <string name="look">查看</string>  
  6.     <string name="error">网络连接异常</string>  
  7. </resources>  

下面是运行效果图,代码我也上传给大家。


相关文章
|
7天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
45 6
|
1天前
|
监控 安全
公司上网监控:Mercury 在网络监控高级逻辑编程中的应用
在数字化办公环境中,公司对员工上网行为的监控至关重要。Mercury 作为一种强大的编程工具,展示了在公司上网监控领域的独特优势。本文介绍了使用 Mercury 实现网络连接监听、数据解析和日志记录的功能,帮助公司确保信息安全和工作效率。
67 51
|
6天前
|
数据采集 监控 数据可视化
Fortran 在单位网络监控软件数据处理中的应用
在数字化办公环境中,Fortran 语言凭借其高效性和强大的数值计算能力,在单位网络监控软件的数据处理中展现出独特优势。本文介绍了 Fortran 在数据采集、预处理和分析可视化三个阶段的应用,展示了其在保障网络安全稳定运行和有效管理方面的价值。
33 10
|
2天前
|
机器学习/深度学习 移动开发 自然语言处理
HTML5与神经网络技术的结合有哪些其他应用
HTML5与神经网络技术的结合有哪些其他应用
11 3
|
4天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
4天前
|
存储 搜索推荐 Java
打造个性化安卓应用:从设计到实现
【10月更文挑战第30天】在数字化时代,拥有一个个性化的安卓应用不仅能够提升用户体验,还能加强品牌识别度。本文将引导您了解如何从零开始设计和实现一个安卓应用,涵盖用户界面设计、功能开发和性能优化等关键环节。我们将以一个简单的记事本应用为例,展示如何通过Android Studio工具和Java语言实现基本功能,同时确保应用流畅运行。无论您是初学者还是希望提升现有技能的开发者,这篇文章都将为您提供宝贵的见解和实用的技巧。
|
8天前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
29 4
|
8天前
|
搜索推荐 开发工具 Android开发
打造个性化Android应用:从设计到实现的旅程
【10月更文挑战第26天】在这个数字时代,拥有一个能够脱颖而出的移动应用是成功的关键。本文将引导您了解如何从概念化阶段出发,通过设计、开发直至发布,一步步构建一个既美观又实用的Android应用。我们将探讨用户体验(UX)设计的重要性,介绍Android开发的核心组件,并通过实际案例展示如何克服开发中的挑战。无论您是初学者还是有经验的开发者,这篇文章都将为您提供宝贵的见解和实用的技巧,帮助您在竞争激烈的应用市场中脱颖而出。
|
9天前
|
机器学习/深度学习 存储 运维
图神经网络在复杂系统中的应用
图神经网络(Graph Neural Networks, GNNs)是一类专门处理图结构数据的深度学习模型,近年来在复杂系统的研究和应用中展现了强大的潜力。复杂系统通常涉及多个相互关联的组件,其行为和特性难以通过传统方法进行建模和分析。
30 3
|
10天前
|
算法 Java 数据库
Android 应用的主线程在什么情况下会被阻塞?
【10月更文挑战第20天】为了避免主线程阻塞,我们需要合理地设计和优化应用的代码。将耗时操作移到后台线程执行,使用异步任务、线程池等技术来提高应用的并发处理能力。同时,要注意避免出现死循环、不合理的锁使用等问题。通过这些措施,可以确保主线程能够高效地运行,提供流畅的用户体验。
21 2