Android查看网络图片

查看网络图片的功能为输入网络图片的地址,点击浏览按钮可以显示网络中的图片。如图

 如图,布局是很简单的一个布局,有一个ImageView控件,一个Button控件,一个EditText控件。

程序需要运用新的进程,并使创建的新进程能够向主进程传递消息,在做进程的期间,我先是没有创建新进程,没有创建新进程的时候程序报错,只是因为当联网获取图片时主进程不能正常工作,然后我创建了新进程,在新进程中并没有使用Handler消息处理机制,这时程序仍然报错,这是主进程不能接受新进程的消息更新界面,于是这时就用到了Handler消息处理机制,使用Handler消息处理机制可以让主线程及时与新线程进行交互。

Handler 消息处理机制,我们要在主线程中创建Handler,然后在新的线程中向主线程传递消息,具体代码如下

//主线程中的Handler 

private Handler handler=new Handler(){
public void handleMessage(android.os.Message msg){
switch (msg.what) {
case SHOW_IMAGE:
Bitmap bitmap = (Bitmap) msg.obj;
ivImage.setImageBitmap(bitmap);
break;
default:
break;
}
};
};

创建viewImage方法,在viewImage方法中创建新的线程,并通过Handler向主线程传递消息,当主线程接收到消息后,改变图片控件内的内容

public void viewImage(View view) {
final String path = etUrl.getText().toString();
if (TextUtils.isEmpty(path)) {
Toast.makeText(this, "图片路径不能为空", Toast.LENGTH_LONG).show();
} else {
new Thread() {
public void run() {
try {
URL url = new URL(path);
// 发出Http请求
HttpURLConnection httpURLConnection = (HttpURLConnection) url
.openConnection();
httpURLConnection.setRequestMethod("GET");
// 设置连接超时时间
httpURLConnection.setConnectTimeout(5000);
int responsecode = httpURLConnection.getResponseCode(); // 返回值为连接结果
if (responsecode == 200) {
InputStream is = httpURLConnection.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(is);
Message msg=new Message();
msg.what=SHOW_IMAGE;
msg.obj=bitmap;
handler.sendMessage(msg);
} else {
Toast.makeText(MainActivity.this, "图片加载失败", Toast.LENGTH_LONG).show();
}


} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();
}
}

另外 由于程序涉及到了网络连接,因此要在AndroidManifest.xml中添加网络权限<uses-permission android:name="android.permission.INTERNET"/>。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值