Android 更新进度对话框

Android 更新进度对话框,android,android-asynctask,progressdialog,updating,Android,Android Asynctask,Progressdialog,Updating,我对的progressdialog有问题,我希望在连接持续期间更新我的progressdialog 这是我的对话 Pro = new ProgressDialog(getParent()); Pro.setMessage("Enviando"); Pro.setIndeterminate(false); Pro.setMax(100); Pro.setCancelable(false); Pro.setProgressStyle(ProgressDialo

我对的progressdialog有问题,我希望在连接持续期间更新我的progressdialog

这是我的对话

Pro = new ProgressDialog(getParent());
    Pro.setMessage("Enviando");
    Pro.setIndeterminate(false);
    Pro.setMax(100);
    Pro.setCancelable(false);
    Pro.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
这是我的任务

private class NuevoPostVideo extends AsyncTask<String, Integer, String>{



     @Override
    protected String doInBackground(String... params) {
         objAcceso = new AccesoBd();
         String jsRes= "";

         SharedPreferences userDetails = getParent().getSharedPreferences("MisPreferencias", MODE_PRIVATE);

        try{

            File f = new  File(sDireccionFoto); 

            FileBody bin = new FileBody(f);

            StringBody  from = new StringBody( Integer.toString(userDetails.getInt("Id",0)));

          StringBody id_recurso = new StringBody(Integer.toString(idEvento));
          StringBody titulo_body = new StringBody(txtVTitulo.getText().toString());
          StringBody ficha = new StringBody("null");


         MultipartEntity reqEntity = new MultipartEntity();
         reqEntity.addPart("imageFile", bin);
         reqEntity.addPart("from",from);
         reqEntity.addPart("idrecurso",id_recurso);
         reqEntity.addPart("titulo", titulo_body);
         reqEntity.addPart("ficha", ficha);


        objAcceso.conxDatosInPost(params[0],reqEntity);
        jsRes="ok";

    }
    catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();

     }finally{return jsRes;}

        }
     @Override
     protected void onPostExecute( String result) {


         if (result.equals("ok")){

         SharedPreferences userDetails = getParent().getSharedPreferences("MisPreferencias", MODE_PRIVATE);
         DetalleEvento objd = new DetalleEvento();
         objd.setTipo(1);
         objd.setFecha(objAcceso.FechaActualinglesa());
         objd.setTituloPost(sTituloPost);
         objd.setImagen(btmImagenElegida);
         objd.setUrl(sDireccionFoto);
         objd.setAutor(userDetails.getString("Nombre","Usted"));



         objAdapterDetalles.arrayDatos.add(0,objd);

         objAdapterDetalles.notifyDataSetChanged();
         lstDatos.setSelection(1);
         dOpciones.dismiss();
         dHacerVideo.dismiss();

         }
            Pro.dismiss();
            prgVProgreso.setVisibility(View.INVISIBLE);
        }
     @Override
        protected void onPreExecute() {

            //prgVProgreso.setVisibility(View.VISIBLE);
        Pro.show();
            //Pro.incrementProgressBy(10);


    }
     @Override
      public void onProgressUpdate(Integer... args){
          Pro.setProgress(args[0]);
                    } 




 }
?我可以在连接持续时更新我的进度对话框吗

更新

我无法计算要插入的文件的大小(本例中为视频),也无法查看每次上传到服务器的进度

找不到这样做的方法

我想知道是否有可能采用某种听众风格


请帮助我或给我一个提示

查看以下示例:

私有类下载文件任务扩展异步任务{
受保护的长doInBackground(URL…URL){
int count=url.length;
长totalSize=0;
for(int i=0;i
您可以使用处理程序根据
AsyncTask
doInBackground(…)
中发生的内容的状态来更新
ProgressDialog
。我想这对你来说太完美了。只需使用
Handler.sendmsg(msg)
发送
处理程序
一条
消息
,这样它就可以更新
进程对话框

,最终解决我的问题,如下所示

这就是我的代码

public class NuevoPostVideoConProgreso extends AsyncTask<String, Integer, String>{

             ProgressDialog dialogProgreso;
            long totalSize;

                 @Override
                protected String doInBackground(String... params) {
                     objAcceso = new AccesoBd();
                     String res = "";
                     SharedPreferences userDetails = getParent().getSharedPreferences("MisPreferencias", MODE_PRIVATE);
                    try{


                    CMultipartContador objconSub = new CMultipartContador(new CMultipartContador.ProgressListener() {

                        @Override
                        public void transferred(long num) {
                            // TODO Auto-generated method stub

                            float antes = (float)(num /(float) totalSize);
                            float despues =(float)(antes * 100);

                            int numero = (int) despues;


                            publishProgress(numero);//(int) ((num /(float) totalSize) * 100));
                        }
                    } );

                        File f = new  File(sDireccionFoto); 

                        FileBody bin = new FileBody(f);

                        StringBody  from = new StringBody( Integer.toString(userDetails.getInt("Id",0)));

                      StringBody id_recurso = new StringBody(Integer.toString(idEvento));
                      StringBody titulo_body = new StringBody(txtVTitulo.getText().toString());
                      StringBody ficha = new StringBody("null");


                    // MultipartEntity reqEntity = new MultipartEntity();
                     objconSub.addPart("imageFile", bin);
                     objconSub.addPart("from",from);
                     objconSub.addPart("idrecurso",id_recurso);
                     objconSub.addPart("titulo", titulo_body);
                     objconSub.addPart("ficha", ficha);

                    totalSize= objconSub.getContentLength();
                   // dialogProgreso.setMax((int)totalSize);

                    objAcceso.conxDatosInPostAsynctask(params[0],objconSub);



                dialogProgreso.setProgress(100);

                    res= "ok";





                }
                catch (Exception e) {
                    // TODO: handle exception
                    e.printStackTrace();

                 }finally{return res;}

                    }
                 @Override
                 protected void onPostExecute( String result) {

                     dialogProgreso.setProgress(100);
                     dialogProgreso.dismiss();
                     dOpciones.dismiss();
                     dHacerVideo.dismiss();


                     LlenarEvento();




                 }
                 @Override
                    protected void onPreExecute() {
                     dialogProgreso = new ProgressDialog(getParent());
                        dialogProgreso.setMessage("Subiendo...");
                        dialogProgreso.setIndeterminate(false);
                        //dialogProgreso.setMax(100);
                        dialogProgreso.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                        //dialogProgreso.setProgress(0);
                        dialogProgreso.setCancelable(false);
                        dialogProgreso.show();
                        //dialogProgreso.setProgress(3);


                }
                 @Override
                  public void onProgressUpdate(Integer... args){
                      dialogProgreso.setProgress(args[0]);
                                } 




             }

            private ImageView aniadirImagen(Bitmap btmi){
                ImageView img= new ImageView(getParent());

                img.setImageBitmap(btmi);
                btmi.recycle();
                return img;
            }

但我的url是一个单一的。mi conexion是一个php,不返回一个整数。请以粗体查看我的参考资料,以便您知道我的意思是从响应中读取内容长度标题,并根据总响应大小(内容长度)和已从响应中读取的数据更新进度…我不理解您的意思我只能在建立连接后执行此操作,而不是之前,ie我需要在运行网络连接时进行更新,读取数据在代码中是一项耗时的任务,因此您可以将其作为进度更新的基础。。
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }
public class NuevoPostVideoConProgreso extends AsyncTask<String, Integer, String>{

             ProgressDialog dialogProgreso;
            long totalSize;

                 @Override
                protected String doInBackground(String... params) {
                     objAcceso = new AccesoBd();
                     String res = "";
                     SharedPreferences userDetails = getParent().getSharedPreferences("MisPreferencias", MODE_PRIVATE);
                    try{


                    CMultipartContador objconSub = new CMultipartContador(new CMultipartContador.ProgressListener() {

                        @Override
                        public void transferred(long num) {
                            // TODO Auto-generated method stub

                            float antes = (float)(num /(float) totalSize);
                            float despues =(float)(antes * 100);

                            int numero = (int) despues;


                            publishProgress(numero);//(int) ((num /(float) totalSize) * 100));
                        }
                    } );

                        File f = new  File(sDireccionFoto); 

                        FileBody bin = new FileBody(f);

                        StringBody  from = new StringBody( Integer.toString(userDetails.getInt("Id",0)));

                      StringBody id_recurso = new StringBody(Integer.toString(idEvento));
                      StringBody titulo_body = new StringBody(txtVTitulo.getText().toString());
                      StringBody ficha = new StringBody("null");


                    // MultipartEntity reqEntity = new MultipartEntity();
                     objconSub.addPart("imageFile", bin);
                     objconSub.addPart("from",from);
                     objconSub.addPart("idrecurso",id_recurso);
                     objconSub.addPart("titulo", titulo_body);
                     objconSub.addPart("ficha", ficha);

                    totalSize= objconSub.getContentLength();
                   // dialogProgreso.setMax((int)totalSize);

                    objAcceso.conxDatosInPostAsynctask(params[0],objconSub);



                dialogProgreso.setProgress(100);

                    res= "ok";





                }
                catch (Exception e) {
                    // TODO: handle exception
                    e.printStackTrace();

                 }finally{return res;}

                    }
                 @Override
                 protected void onPostExecute( String result) {

                     dialogProgreso.setProgress(100);
                     dialogProgreso.dismiss();
                     dOpciones.dismiss();
                     dHacerVideo.dismiss();


                     LlenarEvento();




                 }
                 @Override
                    protected void onPreExecute() {
                     dialogProgreso = new ProgressDialog(getParent());
                        dialogProgreso.setMessage("Subiendo...");
                        dialogProgreso.setIndeterminate(false);
                        //dialogProgreso.setMax(100);
                        dialogProgreso.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                        //dialogProgreso.setProgress(0);
                        dialogProgreso.setCancelable(false);
                        dialogProgreso.show();
                        //dialogProgreso.setProgress(3);


                }
                 @Override
                  public void onProgressUpdate(Integer... args){
                      dialogProgreso.setProgress(args[0]);
                                } 




             }

            private ImageView aniadirImagen(Bitmap btmi){
                ImageView img= new ImageView(getParent());

                img.setImageBitmap(btmi);
                btmi.recycle();
                return img;
            }
public class CMultipartContador extends MultipartEntity {


private final ProgressListener listener;

public CMultipartContador(final ProgressListener listener)
{
    super();
    this.listener = listener;
}

public CMultipartContador(final HttpMultipartMode mode, final ProgressListener listener)
{
    super(mode);
    this.listener = listener;
}

public CMultipartContador(HttpMultipartMode mode, final String boundary, final Charset charset, final ProgressListener listener)
{
    super(mode, boundary, charset);
    this.listener = listener;
}

@Override
public void writeTo(final OutputStream outstream) throws IOException
{
    super.writeTo(new CountingOutputStream(outstream, this.listener));
}

public static interface ProgressListener
{
    void transferred(long num);
}

public static class CountingOutputStream extends FilterOutputStream
{

    private final ProgressListener listener;
    private long transferred;

    public CountingOutputStream(final OutputStream out, final ProgressListener listener)
    {
        super(out);
        this.listener = listener;
        this.transferred = 0;
    }

    public void write(byte[] b, int off, int len) throws IOException
    {
        out.write(b, off, len);
        this.transferred += len;
        this.listener.transferred(this.transferred);
    }

    public void write(int b) throws IOException
    {
        out.write(b);
        this.transferred++;
        this.listener.transferred(this.transferred);
    }
}