欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Andriod 读取网络图片实例代码解析

程序员文章站 2024-02-26 14:48:34
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" />