android.os.NetworkOnMainThreadException,Android根据图片URL加载图片

来源:互联网 发布:数据链路层的数据单位 编辑:程序博客网 时间:2024/06/06 00:35

当在主线程中执行网络操作时,比如根据图片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;}







原创粉丝点击