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

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


相关文章
|
2天前
|
自动驾驶 物联网 5G
毫米波技术及其在5G网络中的应用详解
毫米波技术及其在5G网络中的应用详解
19 3
|
2天前
|
自动驾驶 物联网 5G
深入探索5G网络中的网络切片技术及其应用场景
深入探索5G网络中的网络切片技术及其应用场景
34 3
|
3天前
|
开发者 Python
Python Socket编程:不只是基础,更有进阶秘籍,让你的网络应用飞起来!
在数字时代,网络应用成为连接世界的桥梁。Python凭借简洁的语法和丰富的库支持,成为开发高效网络应用的首选。本文通过实时聊天室案例,介绍Python Socket编程的基础与进阶技巧。基础篇涵盖服务器和客户端的建立与数据交换;进阶篇则探讨多线程与异步IO优化方案,助力提升应用性能。通过本案例,你将掌握Socket编程的核心技能,推动网络应用飞得更高、更远。
19 1
|
7天前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
37 20
Android经典面试题之图片Bitmap怎么做优化
|
1天前
|
开发框架 搜索推荐 开发工具
打造个性化安卓应用:从零开始的Flutter之旅
【8月更文挑战第51天】本文是一篇面向初学者的Flutter入门教程,旨在通过简单易懂的语言和实际代码示例,引导读者步入跨平台移动应用开发的世界。文章首先介绍了Flutter的基本概念和优势,然后逐步展示了如何搭建开发环境、创建第一个Flutter应用,并实现了一个简单的待办事项列表。最后,文章探讨了Flutter在实现高性能和美观界面方面的潜力,鼓励读者发挥创意,探索更多可能。
30 15
|
5天前
|
搜索推荐 Java Android开发
打造个性化安卓应用:从设计到发布的全程指南
【9月更文挑战第15天】本篇文章将带领读者踏上一段激动人心的旅程,从构思一个独特的安卓应用想法开始,直至将其变为现实并成功发布。我们将一起探索如何捕捉灵感、设计界面、编写代码以及最终将应用推向市场。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供宝贵的洞见和实用的技巧,让你的应用在竞争激烈的市场中脱颖而出。
35 17
|
1天前
|
Java Android开发 UED
🧠Android多线程与异步编程实战!告别卡顿,让应用响应如丝般顺滑!🧵
在Android开发中,为应对复杂应用场景和繁重计算任务,多线程与异步编程成为保证UI流畅性的关键。本文将介绍Android中的多线程基础,包括Thread、Handler、Looper、AsyncTask及ExecutorService等,并通过示例代码展示其实用性。AsyncTask适用于简单后台操作,而ExecutorService则能更好地管理复杂并发任务。合理运用这些技术,可显著提升应用性能和用户体验,避免内存泄漏和线程安全问题,确保UI更新顺畅。
13 5
|
1天前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第19天】在人工智能的浩瀚星海中,卷积神经网络(CNN)如同一颗璀璨的星辰,照亮了图像处理的天空。本文将深入CNN的核心,揭示其在图像识别领域的强大力量。通过浅显易懂的语言和直观的比喻,我们将一同探索CNN的奥秘,并见证它如何在现实世界中大放异彩。
|
2天前
|
前端开发 Java 数据库
💡Android开发者必看!掌握这5大框架,轻松打造爆款应用不是梦!🏆
在Android开发领域,框架犹如指路明灯,助力开发者加速应用开发并提升品质。本文将介绍五大必备框架:Retrofit简化网络请求,Room优化数据库访问,MVVM架构提高代码可维护性,Dagger 2管理依赖注入,Jetpack Compose革新UI开发。掌握这些框架,助你在竞争激烈的市场中脱颖而出,打造爆款应用。
26 3
|
2天前
|
存储 API Android开发
"解锁Android权限迷宫:一场惊心动魄的动态权限请求之旅,让你的应用从平凡跃升至用户心尖的宠儿!"
随着Android系统的更新,权限管理成为应用开发的关键。尤其在Android 6.0(API 级别 23)后,动态权限请求机制的引入提升了用户隐私保护,要求开发者进行更精细的权限管理。
15 2