项目碰到了问题,就是多个头像下载的时候,会出现下载不全,下载慢的问题。
操作机制是,服务器返回URL, 本地将这些URL放在一个二维数组中,第一列存头像的URL,第二列存头像的本地文件地址。
1.首先是下载不全的问题,一般这种情况是下载头像的异步任务,出现了不连续性执行的情况,比如当下载图像的URL列表中出现有空字符串或者null时,异步任务会捕捉异常,不再继续接着往下下载,所以出现下载不全的问题。起初的解决方法是,在下载头像的异步任务中,循环下载的时候,如果取到的URL为空,则不执行调取下载图片的工具类函数,这样的结果是,不会出现下载不全,但是下载速度着实让人捉急!所以转回到了下载慢的问题。
2、下载速度慢,一般是数据结构处理不当,这里我用了二维数组就是一个槽点,并且在异步任务中,循环下载的头像的时候,进行判断,着实更是加了一步,应该传给异步任务一个不需再处理的数据,然后让异步任务自己去执行,所以最后我改回了采用arraylist,1,这样可以动态添加非空的字符串,2.一维的arraylist处理效率要高很多,所以最后的代码就是这样:
//下面是初始化下载列表的参数 if(!commentContent.commentportraiturl.equals("")){ commentImgHeadURl.add(commentContent.commentportraiturl); commentImgHeadURl.add(GPUtils.getAppPath().replace("/wrongpic", "/newspic") +"/newspic" +commentContent.commenttopic+ commentContent.commentuid + ".jpg"); }
//下载讨论列表用户头像的异步任务 private class DownloadImgTask extends AsyncTask<ArrayList<String>, String, String>{ private ArrayList<String> commentImgUrl = null; public DownloadImgTask(ArrayList<String> commentImgUrl) { // TODO Auto-generated constructor stub this.commentImgUrl = commentImgUrl; } protected void onPreExecute() { //TODO:缓冲提示 super.onPreExecute(); } @Override protected String doInBackground(ArrayList<String>... params) { // TODO Auto-generated method stub //在此获取要下载的图片的url com.haojiazhang.download.DownloadManager dm = GPUtils.GetDownloadManager(); try { for(int i = 0; i < commentImgUrl.size(); i=i+2){//一对一对的取数据,第一个是下载的URL,第二个是存本地的图像路径 if(!dm.downloadImg(commentImgUrl.get(i),commentImgUrl.get(i+1))) return "isdownloadfail"; } return "isdownloadok"; } catch (Exception e){ } return null; } protected void onPostExecute(String result) { if(result!=null && result.equalsIgnoreCase("isdownloadok")){ // GPUtils.toast(context, "题目下载成功"); discussesAdapter.notifyDataSetChanged(); }else { // GPUtils.toast(context, "题目下载失败"); } super.onPostExecute(result); } protected void onCancelled() { super.onCancelled(); } }
时间: 2024-10-12 18:12:51