ImageView显示网络上的图片
ImageView显示网络上的图片
一、简介

二、方法
1)ImageView显示网络上的图片方法
第一步:从网络上下载图片
byte[] byteArr = downImage();//这个是自己写的函数
将byte数组转换成bitmap
Bitmap bitmap1 = BitmapFactory.decodeByteArray(byteArr, 0,byteArr.length);
第二步:在imageView控件上显示图片
iv_fromNet.setImageBitmap(bitmap1);
第三步:给手机设置能联网的属性
在AndroidManifest.xml中设置能联网的权限
<uses-permission android:name="android.permission.INTERNET" />
2)从网络上下载图片的方法
第一步:创建url连接
URL url = new URL("http://img5.imgtn.bdimg.com/it/u=3902436073,1089717092&fm=26&gp=0.jpg");
第二步:拿到HTTP连接对象
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
第三步:设置连接超时
connection.setConnectTimeout(5000);
第四步:设置HTTP请求方式
connection.setRequestMethod("GET");
第五步:获得响应状态码
int code = connection.getResponseCode();
连接成功后
第六步:拿到输入流,用于读取响应的内容
InputStream is = connection.getInputStream();
第七步:输出流用于写数据
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
第八步:读取数据就好
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) != -1) {
byteArrayOut.write(buffer, 0, len);
}
return byteArrayOut.toByteArray();
三、代码实例
效果图:

点击按钮之后,获取http://img5.imgtn.bdimg.com/it/u=3902436073,1089717092&fm=26&gp=0.jpg的图片

代码:
/iamgeViewDemo1/src/fry/Activity04.java
package fry; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import com.example.iamgeViewDemo1.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener; public class Activity04 extends Activity {
// 1)ImageView显示网络上的图片方法
// 第一步:从网络上下载图片
//
// 第二步:在imageView控件上显示图片
//
// 第三步:给手机设置能联网的属性
private ImageView iv_fromNet;
private Button btn_downLoadImage; @SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
setTitle("imageView显示网络上的图片");
super.onCreate(savedInstanceState); StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads().detectDiskWrites().detectNetwork()
.penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects().detectLeakedClosableObjects()
.penaltyLog().penaltyDeath().build()); setContentView(R.layout.activity03); btn_downLoadImage = (Button) findViewById(R.id.btn_downLoadImage);
iv_fromNet = (ImageView) findViewById(R.id.iv_fromNet); btn_downLoadImage.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub BitmapDrawable bitmapDrawable=(BitmapDrawable)(getResources().getDrawable(R.drawable.image1));
Bitmap bitmap2=bitmapDrawable.getBitmap();
//
// iv_fromNet.setImageBitmap(bitmap2); // 从网络上下载图片
byte[] byteArr = downImage(); // 在imageView控件上显示图片
Bitmap bitmap1 = BitmapFactory.decodeByteArray(byteArr, 0,
byteArr.length);
iv_fromNet.setImageBitmap(bitmap1);
// 给手机设置能联网的属性 }
}); } /**
* 从网络中下载图片
*
*/
private byte[] downImage() {
try {
//创建url连接
URL url = new URL(
"http://img5.imgtn.bdimg.com/it/u=3902436073,1089717092&fm=26&gp=0.jpg");
// 拿到HTTP连接对象
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
// 设置连接超时
connection.setConnectTimeout(5000);
// HTTP请求方式
connection.setRequestMethod("GET");
// 获得响应状态码
int code = connection.getResponseCode();
if (code == 200) {// 表示获取成功
// 拿到输入流,用于读取响应的内容
InputStream is = connection.getInputStream();
// 输出流用于写数据
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
// 设置缓存数组
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) != -1) {
byteArrayOut.write(buffer, 0, len);
}
return byteArrayOut.toByteArray();
} } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return null;
} // 2)从网络上下载图片的方法
//
// 第一步:创建url连接
// 第二步:拿到HTTP连接对象
// 第三步:设置连接超时
// 第四步:设置HTTP请求方式
// 第五步:获得响应状态码
// 连接成功后
//
// 第六步:拿到输入流,用于读取响应的内容
// 第七步:输出流用于写数据
// 第八步:读取数据就好 }
/iamgeViewDemo1/res/layout/activity03.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <Button
android:id="@+id/btn_downLoadImage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="从网络上下载图片"
/> <ImageView
android:id="@+id/iv_fromNet"
android:layout_width="match_parent"
android:layout_height="match_parent"
/> </LinearLayout>
/iamgeViewDemo1/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.iamgeViewDemo1"
android:versionCode="1"
android:versionName="1.0" > <uses-permission android:name="android.permission.INTERNET" /> <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="fry.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>
<activity
android:name="fry.Activity01"
android:exported="true" >
</activity>
<activity
android:name="fry.Activity02"
android:exported="true" >
</activity>
<activity
android:name="fry.Activity03"
android:exported="true" >
</activity>
<activity
android:name="fry.Activity04"
android:exported="true" >
</activity>
</application> </manifest>
四、收获
1、debug找错误
2、源代码和方法说明找bug
3、输入流和输出流

输入内容到输入流,然后到内存,内存中的数据到输出流,输出流的数据到输出。
1)拿到输入流,用于读取响应的内容
InputStream is = connection.getInputStream();
2)把输入流is中的东西读到buffer中
is.read(buffer)
3)buffer中的内容写到输出流byteArrayOut
byteArrayOut.write(buffer, 0, len);
4、byte array变成bitmap
Bitmap bitmap1 = BitmapFactory.decodeByteArray(byteArr, 0,byteArr.length);
5、创建url连接
URL url = new URL("http://img5.imgtn.bdimg.com/it/u=3902436073,1089717092&fm=26&gp=0.jpg");
6、拿到HTTP连接对象
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
五、遇到的bug
1、android.os.NetworkOnMainThreadException
这是因为在android3.0后主线程中不许网络连接
解决方法:添加了一段线程警察的代码
2、bitmap1==null但是用于创建bitmap1的byte array有数据

byte array不能被decode,换一张图片就好
3、还有很多bug,都忘记了
ImageView显示网络上的图片的更多相关文章
- [Android]通过setImageURI设置网络上面的图片
设置imageView显示网络上的图片 picUrl = new URL(getIntent().getExtras().getString("map_url")); Bitmap ...
- ios 从网络上获取图片并在UIImageView中显示
ios 从网络上获取图片 -(UIImage *) getImageFromURL:(NSString *)fileURL { NSLog(@"执行图片下载函数"); UIIm ...
- Android 多线程:使用Thread和Handler (从网络上获取图片)
当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如:用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,并把相关的事件分 ...
- Android 自定义 ListView 显示网络上 JSON 格式歌曲列表
本文内容 环境 项目结构 演示自定义 ListView 显示网络上 JSON 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章,没有源代码可下载,根据文中提供的代码片段,自己新建的项目(比较可恶 ...
- 【iOS开发-从网络上获取图片尺寸】
实际开发过程中,容易碰到从网络上获取图片尺寸的场景,比如一个UIImageView要装载从网络上获取的图片,但要先设置其frame,此时又不知道图片尺寸,就要从网络上获取尺寸了.为了最好的用户体验,一 ...
- 使用SimpleAdapter 适配器时显示网络上图片方法
SimpleAdapter listItemAdapter = new SimpleAdapter(this, listItem, R.layout.items_list, new String[] ...
- 从网络上获取图片并保存在sdCard上
package com.aib.soft; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileO ...
- 用thinkphp将网络上的图片下载到本地服务器
我用的thinkphp版本是3.2.3,这个版本的跟更早些版本的调用方法不太一样,正确的调用方法是: Demo3Controller.class <?php namespace Home\Con ...
- 从网络上获取图片,并写入excel文件
package com.weChat.utils; import com.manage.utils.DateUtil;import com.manage.utils.MD5Util;import or ...
随机推荐
- git --fast-version-control
--distributed-is-the-new-centralized 读二进制文件 python 读doc xls 几乎所有的版本控制系统都以某种形式支持分支.使用分支意味着你可以把你的工作从 ...
- Windows数据库定时备份
首先打开:任务计划程序 右键任务计划程序库,选择创建基本任务 然后即可以按照实际情况逐步进行 直到启动程序--浏览(程序或脚本)时,这里本人导入的是backup.bat文件,文件内容为 @echo 设 ...
- 原!总结 quartz集群 定时任务 测试运行ok
由于项目优化重构,想将定时任务从quartz单机模式变成集群或分布式的方式.于是,百度了一圈....修修改改...用集群的方式部署定时任务,测试可以... 集群?分布式?什么区别? 集群:同一个业务, ...
- scrapy spider
spider 定义:在spiders文件夹中由用户自定义,继承scrapy.Spider类或其子类 Spider并没有提供什么特殊的功能. 其仅仅请求给定的 start_urls/start_requ ...
- php socket 处理只是来数据流,该怎样避免(好像是堵塞了)
php socket 处理只是来数据流,该怎样处理(好像是堵塞了) 需求:php接受一个硬件往8888port上发送数据,假设收到后,应socket_send函数返回"\xFA\x01\x0 ...
- 浅谈HTML文档模式
不知道爱多想的你有没有在编写HTML代码时思考过 <!DOCTYPE html> 或是这一长串看都看不懂的 <!DOCTYPE HTML PUBLIC "-//W3C//D ...
- centos上源码安装clang 3.8
之前想在centos系统上安装clang 3.6版本,由于yum上版本太低,想通过源码编译安装.按照网上说的源码安装步骤,下好llvm.clang.clang-tools-extra和compiler ...
- 关于shared pool的深入探讨(一) 【转载】
关于shared pool的深入探讨(一) 作者:eygle |English [转载时请标明出处和作者信息]|[恩墨学院 OCM培训传DBA成功之道]链接:http://www.eygle.co ...
- unittest 单元测试框架断言方法
unittest单元测试框架的TestCase类下,测试结果断言方法:Assertion methods 方法 检查 版本 assertEqual(a, b) a == b assertNotEqu ...
- mysqlbinlog作用
mysqlbinlog:解析mysql的binlog日志 在 mysql-bin.index里面记录了所有的binlog文件,它是一个索引 binlog日志的作用:用来记录mysql内部增删改查等对m ...