Andriod 读取网络图片实例代码解析
程序员文章站
2024-02-23 17:26:16
android手机上,我们常用imageview显示图片,我们本章获取网络图片并显示在imageview中。
一、设计界面
1、布局文件
打开re...
android手机上,我们常用imageview显示图片,我们本章获取网络图片并显示在imageview中。
一、设计界面
1、布局文件
打开res/layout/activity_main.xml文件。
输入以下代码:
<?xml version="." encoding="utf-"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <imageview android:id="@+id/imagephoto" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </linearlayout>
二、程序文件
打开“src/com.genwoxue.networkphoto/mainactivity.java”文件。
然后输入以下代码:
package com.genwoxue.networkphoto; import java.io.ioexception; import java.io.inputstream; import java.net.httpurlconnection; import java.net.malformedurlexception; import java.net.url; import android.app.activity; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.os.asynctask; import android.os.bundle; import android.widget.imageview; public class mainactivity extends activity { private imageview imview; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); imview = (imageview) findviewbyid(r.id.imagephoto); string imageurl = "http://img.baidu.com/img/image/ilogob.gif"; new networkphoto().execute(imageurl); } /* 四个步骤: * ()onpreexecute(),执行预处理,它运行于ui线程, * 可以为后台任务做一些准备工作,比如绘制一个进度条控件。 * ()doinbackground(params...),后台进程执行的具体计算在这里实现, * doinbackground(params...)是asynctask的关键,此方法必须重载。 * 在这个方法内可以使用 publishprogress(progress...)改变当前的进度值。 * ()onprogressupdate(progress...),运行于ui线程。如果 * 在doinbackground(params...) 中使用了publishprogress(progress...),就会 * 触发这个方法。在这里可以对进度条控件根据进度值做出具体的响应。 * ()onpostexecute(result),运行于ui线程,可以对后台任务的结果做出处理,结果 * 就是doinbackground(params...)的返回值。此方法也要经常重载,如果result为 * null表明后台任务没有完成(被取消或者出现异常)。 * */ //本案例我们仅使用了()和() class networkphoto extends asynctask<string, integer, bitmap> { public networkphoto() { } //doinbackground(params...),后台进程执行的具体计算在这里实现,是asynctask的关键,此方法必须重载。 @override protected bitmap doinbackground(string... urls) { url url = null; bitmap bitmap = null; httpurlconnection conn=null; inputstream is=null; try { url = new url(urls[]); } catch (malformedurlexception e) { e.printstacktrace(); } try { conn = (httpurlconnection) url.openconnection(); conn.setdoinput(true); conn.connect(); is = conn.getinputstream(); bitmap = bitmapfactory.decodestream(is); is.close(); } catch (ioexception e) { e.printstacktrace(); } finally { if(conn!=null){ conn.disconnect(); conn=null; } if(is!=null) { try { is.close(); } catch (ioexception e) { e.printstacktrace(); } is=null; } } return bitmap; } //onpostexecute(result),运行于ui线程,可以对后台任务的结果做出处理,结果 //就是doinbackground(params...)的返回值。 @override protected void onpostexecute(bitmap bitmap) { // 返回结果bitmap显示在imageview控件 imview.setimagebitmap(bitmap); } } }
三、配置文件
打开“androidmanifest.xml”文件。
然后输入以下代码:
<?xml version="." encoding="utf-"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.genwoxue.networkphoto" android:versioncode="" android:versionname="." > <uses-sdk android:minsdkversion="" android:targetsdkversion="" /> <uses-permission android:name="android.permission.internet" /> <application android:allowbackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme" > <activity android:name="com.genwoxue.networkphoto.mainactivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest>
注意:需要在androidmanifest.xml文件中添加权限:
<uses-permission android:name="android.permission.internet" />