当在主线程中执行网络操作时,比如根据图片URL加载图片,会抛出NetworkOnMainThreadException这个异常。
那么怎么从网络断获取图片并加载呢?使用AsyncTask:
json字符串:
{
"people": [ //数组,最像的50个人,按分数的降序排列
{
"score": 0.63, //浮点数,相似度,0到1,越接近1越像
"id": 732, //字符串,这个人的id
"chinese_name": "刘博" //字符串,这个人的中文名字。可能是空字符串。chinese_name和english_name至少有一个非空
"english_name": "Barack_Obama" //字符串,这个人的英文名字。可能是空字符串。chinese_name和english_name至少有一个非空
},
{}, ...
],
"final_time": 877 //整数,服务器完整处理过程所用时间
}
获取图片URL:
JSONObject jsonObject = JSON.parseObject(json);
JSONArray peopleJsonArr = jsonObject.getJSONArray("people");
JSONObject peopleJsonObj = peopleJsonArr.getJSONObject(0);
final String PEOPLEID = peopleJsonObj.getString("id");
Log.e("PEOPLEID====",PEOPLEID);
String peolepUrl = "http://faceall.cn/static/img/celebrity/"+PEOPLEID+".jpg";//图片的URL
new LoadBitmapFromUrl().execute(peolepUrl);//加载图片
private class LoadBitmapFromUrl extends AsyncTask<String,Void,Bitmap>{
@Override
protected Bitmap doInBackground(String... params) {
return loadImageFromNetwork(params[0]);
}
@Override
protected void onPostExecute(Bitmap bitmap) {
ivResultCelebrity.setImageBitmap(bitmap);//要加载的图片
}
}
private Bitmap loadImageFromNetwork(String url) {
//得到可用的图片
Bitmap bitmap = simpleNetworkImage(url);
if (bitmap == null) {
Log.i("loadImageFromNetwork:", "bitmap is null");
}
return bitmap;
}
public Bitmap simpleNetworkImage(String url) {
Bitmap imgBitmap = null;
try {
URL picUrl = new URL(url);
imgBitmap = BitmapFactory.decodeStream(picUrl.openStream());
} catch (IOException e) {
e.printStackTrace();
}
return imgBitmap;
}