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


0 0
原创粉丝点击