android 如何显示网络图片不显示,Android 显示网络图片

本文内容 环境

演示显示网络图片 本文演示 Android 如何显示网络图片。学习一门新的语言,最好办法就先了解该语言的语法和库,以及设计思想,再着手现实一些常用功能,毕竟以后用该语言是要写程序的,而程序说白了,就是一个个功能点。

环境 Windows 2008 R2 64 位

Eclipse ADT V22.6.2,Android 4.4.3

三星 SM-G3508

演示显示网络图片

利用一个新线程加载并显示网络图片,并使用 handler 传递消息,若无异常,则用 Toast 现实“加载图片….”,否则,若网络图片不存在,显示“图片不存在”。同时,自定义一个类 HttpUtils,负责用 HTTP 访问网络。Android 程序如下图所示。

0f4df4e00031ccb53f4cb37726cea35d.png

图 1

XML 页面文件略,只是添加 ImageView 和 Button 控件,核心代码如下:

自定义 HttpUtils 类

使用 HTTP 协议访问网络图片。

package com.example.viewwebimagedemo.utils;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

public class HttpUtils {

private final static String URL_PATH = "http://images.cnblogs.com/cnblogs_com/liuning8023/588559/o_Android.jpg";

public HttpUtils() {

// TODO Auto-generated constructor stub

}

public static InputStream getImageViewInputStream() throws IOException {

InputStream inputStream = null;

URL url = new URL(URL_PATH);

if (url != null) {

HttpURLConnection httpURLConnection = (HttpURLConnection) url

.openConnection();

httpURLConnection.setConnectTimeout(3000);

httpURLConnection.setRequestMethod("GET");

httpURLConnection.setDoInput(true);

int response_code = httpURLConnection.getResponseCode();

if (response_code == 200) {

inputStream = httpURLConnection.getInputStream();

}

}

return inputStream;

}

}

MainActivity 类

负责加载并显示网络图片。

package com.example.viewwebimagedemo;

import java.io.InputStream;

import com.example.viewwebimagedemo.R;

import com.example.viewwebimagedemo.utils.HttpUtils;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Bundle;

import android.os.Handler;

import android.os.Looper;

import android.os.Message;

import android.view.View;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.Toast;

public class MainActivity extends Activity {

private Button button;

private ImageView imageView;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

button = (Button) this.findViewById(R.id.btn);

imageView = (ImageView) this.findViewById(R.id.imageView);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

new Thread(access).start();

}

});

}

// 获得图片

public void getImg() {

try {

InputStream inputStream = HttpUtils.getImageViewInputStream();

Bitmap bitmap = BitmapFactory.decodeStream(inputStream);

Looper.prepare();// 必须调用此方法,要不然会报错

Message msg = new Message();

msg.what = 0;

msg.obj = bitmap;

handler.sendMessage(msg);

} catch (Exception e) {

Toast.makeText(getApplicationContext(), "获取图片错误", 1).show();

}

}

// 加载图片

private void setImg(Bitmap bm) {

imageView.setImageBitmap(bm);

}

// 另一个线程从网络获得图片

private Runnable access = new Runnable() {

@Override

public void run() {

getImg();

}

};

// 更新UI信息

private Handler handler = new Handler() {

@Override

public void handleMessage(Message msg) {

if (msg.what == 0) {

if (msg.obj == null) {

Toast.makeText(getApplicationContext(), "图片不存在", 1).show();

} else {

Toast.makeText(getApplicationContext(), "加载图片...", 1)

.show();

setImg((Bitmap) msg.obj);

}

}

}

};

}

授权 Android 访问网络权限

修改 AndroidManifest.xml 文件,添加授权 Android 访问网络的权限。

若直接在 Activity 的 onCreate 事件里加载并显示图片,如下所示:

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// 假设已经从网络获得 bitmap

imageView = (ImageView) this.findViewById(R.id.imageView);

imageView.setImageBitmap(bitmap);

}

会报 android.os.NetworkOnMainThreadException 异常。因为,Android 4.x 之后,不允许在主线程进行网络访问。

原文:http://www.cnblogs.com/liuning8023/p/3795602.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值