【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>  

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


相关文章
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
5月前
|
监控 安全 Shell
管道符在渗透测试与网络安全中的全面应用指南
管道符是渗透测试与网络安全中的关键工具,既可用于高效系统管理,也可能被攻击者利用实施命令注入、权限提升、数据外泄等攻击。本文全面解析管道符的基础原理、实战应用与防御策略,涵盖Windows与Linux系统差异、攻击技术示例及检测手段,帮助安全人员掌握其利用方式与防护措施,提升系统安全性。
241 6
|
9月前
|
SQL 分布式计算 Serverless
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
鹰角网络为应对游戏业务高频活动带来的数据潮汐、资源弹性及稳定性需求,采用阿里云 EMR Serverless Spark 替代原有架构。迁移后实现研发效率提升,支持业务快速发展、计算效率提升,增强SLA保障,稳定性提升,降低运维成本,并支撑全球化数据架构部署。
1001 56
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
|
9月前
|
存储 Android开发
如何查看Flutter应用在Android设备上已被撤销的权限?
如何查看Flutter应用在Android设备上已被撤销的权限?
404 64
|
8月前
|
人工智能 监控 安全
NTP网络子钟的技术架构与行业应用解析
在数字化与智能化时代,时间同步精度至关重要。西安同步电子科技有限公司专注时间频率领域,以“同步天下”品牌提供可靠解决方案。其明星产品SYN6109型NTP网络子钟基于网络时间协议,实现高精度时间同步,广泛应用于考场、医院、智慧场景等领域。公司坚持技术创新,产品通过权威认证,未来将结合5G、物联网等技术推动行业进步,引领精准时间管理新时代。
|
9月前
|
存储 SQL 运维
中国联通网络资源湖仓一体应用实践
本文分享了中国联通技术专家李晓昱在Flink Forward Asia 2024上的演讲,介绍如何借助Flink+Paimon湖仓一体架构解决传统数仓处理百亿级数据的瓶颈。内容涵盖网络资源中心概况、现有挑战、新架构设计及实施效果。新方案实现了数据一致性100%,同步延迟从3小时降至3分钟,存储成本降低50%,为通信行业提供了高效的数据管理范例。未来将深化流式数仓与智能运维融合,推动数字化升级。
459 0
中国联通网络资源湖仓一体应用实践
|
4月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
493 11
|
5月前
|
数据采集 存储 数据可视化
Python网络爬虫在环境保护中的应用:污染源监测数据抓取与分析
在环保领域,数据是决策基础,但分散在多个平台,获取困难。Python网络爬虫技术灵活高效,可自动化抓取空气质量、水质、污染源等数据,实现多平台整合、实时更新、结构化存储与异常预警。本文详解爬虫实战应用,涵盖技术选型、代码实现、反爬策略与数据分析,助力环保数据高效利用。
350 0
|
5月前
|
安全 Linux
利用Libevent在CentOS 7上打造异步网络应用
总结以上步骤,您可以在CentOS 7系统上,使用Libevent有效地构建和运行异步网络应用。通过采取正确的架构和代码设计策略,能保证网络应用的高效性和稳定性。
176 0
|
8月前
|
机器学习/深度学习 算法 测试技术
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
本文探讨了基于图的重排序方法在信息检索领域的应用与前景。传统两阶段检索架构中,初始检索速度快但结果可能含噪声,重排序阶段通过强大语言模型提升精度,但仍面临复杂需求挑战
288 0
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析