android从网络上拿图的几个方式
2016-01-11 21:48
369 查看
注:从网络上获取数据,不能写在主线程里
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
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
相关文章推荐
- 图解HTTP阅读笔记(1)-网络基础TCP/IP
- socket网络编程----addrinfo结构体和getaddrinfo函数介绍
- 一个简单的爬虫(1)
- nyoj 223 Drainage Ditches 【网络流&&最大流】
- 通讯系统经验谈【一】TCP连接状态分析:SYNC_RECV,CLOSE_WAIT,TIME_WAIT
- UR的TCP通讯
- 使用TCP协议的NAT穿透技术 (转载)
- 【jsp】The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path
- 阿岳之_httpd2.2网页认证和虚拟主机配置篇(一)
- 启动一个支持文件上传的HTTP-Server
- HDU 4265 Science! 网络流解多重匹配,输出所有比配可能
- http协议
- Android:Https跳过证书验证、Https使用证书、HttpClient、
- 虚拟机VMware3种网络模式(桥接、nat、Host-only)的工作原理
- 使用套接字Socked实现网络通讯(网络编程)
- 【解决方案】Http请求报错
- 从僵尸网络追踪到入侵检测 第6章 Honeyd日志使用
- 关于http接口防止非法调用的设计方案
- 网络通信的工作原理
- 反向传播神经网络 BPNN