android从网络上拿图的几个方式
来源:互联网 发布:洗车刷卡软件 编辑:程序博客网 时间:2024/06/07 18:27
注:从网络上获取数据,不能写在主线程里
localhost,127.0.0.1不可用
更新UI界面不能写在下面的new Thread() {...中
否则报错:Only the original thread that created a view hierarchy can touch its views。
// /第一种
private Handler handler2 = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
imageView.setImageBitmap((Bitmap) msg.obj);
break;
default:
break;
}
};
};
//new个线程,使用Handler更新UI界面
public void getImg() {new Thread() {
@Override
public void run() {
String path = "http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg";
try {
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
// 设置超时
connection.setConnectTimeout(5000);
//
// 设置方式
connection.setRequestMethod("GET");
// 连接成功
if (connection.getResponseCode() == 200) {
InputStream inputStream = connection.getInputStream();
//
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
// 1使用message
//设置message
Message message = new Message();
//设置标志码
message.what = 1;
//绑定资源
message.obj = bitmap;
handler2.sendMessage(message);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
}
//---------第二种---------------------------------------------
// AsyncTask:从网络拿图(不需要new 线程)
private class MyTask extends AsyncTask<String, String, Bitmap> {
Bitmap bitmap = null;
/*
* (non-Javadoc)
*
* @see android.os.AsyncTask#doInBackground(Params[])
*/
@Override
protected Bitmap doInBackground(String... params) {
try {
URL url = new URL(params[0]);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setReadTimeout(5000);
connection.setRequestMethod("GET");
if (connection.getResponseCode() == 200) {
bitmap = BitmapFactory.decodeStream(connection
.getInputStream());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bitmap;
}
/*
* (non-Javadoc)
*
* @see android.os.AsyncTask#onPreExecute()
*/
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
progressBar.setVisibility(View.VISIBLE);
imageView.setVisibility(View.INVISIBLE);
super.onPreExecute();
}
/*
* (non-Javadoc)
*
* @see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
@Override
protected void onPostExecute(Bitmap result) {
//
progressBar.setVisibility(View.GONE);
imageView.setVisibility(View.VISIBLE);
// 改变UI界面
imageView.setImageBitmap(result);
}
/*
* (non-Javadoc)
*
* @see android.os.AsyncTask#onProgressUpdate(Progress[])
*/
@Override
protected void onProgressUpdate(String... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
}
//调用该类
new MyTask().execute("一张图片网址");
//上面更新UI界面,除使用handler+message,还可以使用handler+runnable
后面的使用方法我在网上看到一篇很好的介绍:
http://blog.csdn.net/djx123456/article/details/6325983
- android从网络上拿图的几个方式
- Android从网络上获取图片的两种方式
- android下赚钱的几个方式
- Android网络通信的方式
- Android 网络请求的方式
- 几个网络访问框架的post请求使用方式
- Android之从网络上获取图片的两种方式讲解:thread+handle和AsyncTask方式
- android httpUrlConnection 方式从网络上面下载图片
- 延时的几个方式
- Android保存从网络获取的图片
- Android网络通信的六种方式
- Android网络通信的六种方式
- Android网络通信的六种方式
- Android的三种网络通信方式
- 在Android中几种网络编程的方式:
- Android中访问网络的方式
- android中网络请求方式的总结
- Android的三种网络通信方式
- 史上最全github使用方法:github入门到精通
- 【Android4.2系统源码】Activity学习
- AFNetWorking的使用方法
- Scala 中for循环示例
- mac 下删除mysql
- android从网络上拿图的几个方式
- IOS-多控制器管理一
- Machine Learning-朴素贝叶斯算法
- Windowsoftinputmode属性使用
- 20160111 图书搜索
- Arduino接口-week1-Lesson2
- iOS笔记之成员变量及属性变量
- 什么是POSIX
- 数组地址计算总结