首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

一个上载的操作怎么更新进度条有代码

2012-08-29 
一个下载的操作如何更新进度条有代码类似于安卓市场或机锋这样的有个安装的按钮然后有个进度条当触发这个

一个下载的操作如何更新进度条有代码
类似于安卓市场或机锋这样的 有个安装的按钮 然后有个进度条 当触发这个按钮后就会有进度条更新 这个我不知道如何去做了 请教一下大家 看代码

继承的BaseAdapter不多说

Java code
public class GamesInfoListAdapter extends BaseAdapter{................}


重点在getView

Java code
    @Override    public View getView(final int index, View convertView, ViewGroup parent) {        Log.d("ccf", "getView"+index);        final GridHolder holder;        if (convertView == null) {               convertView = mInflater.inflate(R.layout.gridview_item, null);               holder = new GridHolder();            holder.appImage = (ImageView)convertView.findViewById(R.id.itemImage_logo);            holder.appName = (TextView)convertView.findViewById(R.id.itemText_name);            holder.appNet = (TextView)convertView.findViewById(R.id.itemText_type_name);            holder.btns = (ImageButton)convertView.findViewById(R.id.btns);            holder.size = (TextView)convertView.findViewById(R.id.tv_game_size);            holder.pro = (ProgressBar) convertView.findViewById(R.id.progressBar1);            holder.textView = (TextView) convertView.findViewById(R.id.tv_size);            holder.ratingBarScore = (RatingBar)convertView.findViewById(R.id.ratingBar_score);                        convertView.setTag(holder);           }else{             holder = (GridHolder) convertView.getTag();           }        GameInfo info = null;        info = list.get(index);        if (info != null) {               if(info.getLogo_url() != null){                //如果取得到图片就用取到的网络图片,不然就用默认                Log.d("ccf", info.getLogo_url().substring(21));                holder.appImage.setImageBitmap(info.getDownloadBitmap());            }                        holder.appName.setText(info.getName());            holder.appNet.setText(info.getTypeName());            holder.size.setText(info.getSize());            holder.ratingBarScore.setRating(Float.parseFloat(info.getSourceScore()));//评分 暂时注销掉            holder.btns.setTag(info.getDownLoadFileUrl());            final String gameName;            gameName = info.getName();            holder.btns .setOnClickListener(new OnClickListener(){                @Override                public void onClick(View v) {   //触发下载操作                                        if (flag == 0){//判断点击标记                                        holder.ratingBarScore.setVisibility(View.GONE);                    holder.pro.setVisibility(View.VISIBLE);                    holder.textView.setVisibility(View.VISIBLE);                    if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){                    }else {//                        Toast.makeText(this, "没有SD卡", 1000).show();                        Log.v("wjp", "7889900");                    }                    final String downloadUrl =(String)v.getTag();                    Thread thread = new Thread(){                        int count = 0;                        public void run(){                          Log.v("ccf", "onClick");                          try {                              WebHelper.downLoadFile(context, downloadUrl, gameName);                              WebHelper.openFile(context, new File("/sdcard/9twan/"+ gameName +".apk"));                              if(!WebHelper.REGISTER_FLAG){                                  Log.v("GamesInfoListAdapter", "WebHelper.REGISTER_FLAG == false");                                  String imei, mac, mobile_number, model, brand;                                  boolean flag;                                  TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);                                  imei = tm.getDeviceId();                                  if(imei == null){                                      imei = "CUSTOM" + WebHelper.generateRandomIMEIString(15);                                  }                                  mac = null;//                                  mac = tm.getDeviceId(); //这个自己写个取WIFI的方法                                  if(mac == null){                                      mac = "CUSTOM" + WebHelper.generateRandomMacString(17);                                  }                                  mobile_number = tm.getLine1Number();                                  model = tm.getLine1Number();                                  brand = tm.getLine1Number();                                  flag = WebHelper.regDevice(context, "install", imei, mac, mobile_number, model, brand);                                  if(flag){                                      WebHelper.REGISTER_FLAG = true;                                      Log.v("GamesInfoListAdapter", "WebHelper.REGISTER_FLAG == true");                                  }                              }                                                        }catch (Exception e){                              e.printStackTrace();                          }                        }                    };                    Log.v("wjp", "正在运行"+thread.getName());                    thread.start();                    Toast.makeText(context, "开始下载" + gameName, 0).show();                    holder.btns.setBackgroundResource(R.drawable.tab_out);                                        flag =1;                    }else {//                        Thread.interrupted();//暂停 返回boolean//                        Thread.sleep(3000);                                               holder.btns.setBackgroundResource(R.drawable.tab_install);                        flag =0;                                            }                }            });        }        return convertView;    } 





//保存的下载的文件 APK
Java code
    protected File downLoadFile(String httpUrl) {        // TODO Auto-generated method stub        final String fileName = "updata.apk";        File tmpFile = new File("//sdcard//update");        if (!tmpFile.exists()) {                tmpFile.mkdir();        }        final File file = new File("//sdcard//update//" + fileName);        try {                URL url = new URL(httpUrl);                try {                        HttpURLConnection conn = (HttpURLConnection) url                                        .openConnection();                        InputStream is = conn.getInputStream();//                        FileLength = conn.getContentLength();//根据响应得到大小//                        Log.v("wjp","FileLength"+FileLength );//                        if(FileLength <=0)throw new RuntimeException("无法获取文件的大小");//获取文件大小//                        Log.v("wjp","FileLengsss"+FileLength );                        if(is == null)throw new RuntimeException("stream is null");//null                        FileOutputStream fos = new FileOutputStream(file);                        byte[] buf = new byte[1024];//                                                conn.connect();                        double count = 0;                        if (conn.getResponseCode() >= 400) {                                Toast.makeText(context, "出错", Toast.LENGTH_SHORT)                                                .show();                        } else {                                while (count <= 100) {                                        if (is != null) {                                                int numRead = is.read(buf);                                                if (numRead <=0) {                                                        break;                                                } else {                                                        fos.write(buf, 0, numRead);//                                                        count +=numRead;                                                        //                                                        sendMsg(1);                                                }                                        } else {                                                break;                                        }                                }                        }                        conn.disconnect();                        fos.close();                        is.close();                } catch (IOException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                }        } catch (MalformedURLException e) {                // TODO Auto-generated catch block                e.printStackTrace();        }        return file;}

不知道怎么去更新 让进度条去显示



[解决办法]
利用接口回调,具体可以参考网上那种异步加载图片的例子,异步加载图片是将图片加载放在另外的线程中,加载完成后通过回调接口通知ui线程,更新界面,而你现在可以利用这个原理,利用回调接口通知ui线程更新下载进度。原理就是这样,例子的话,百度一下异步加载图片吧,一大把

热点排行
Bad Request.