Delari Jesus
Delari Jesus

Reputation: 411

Updating Progressdialog

i have problem with progressdialog to the, i want updating my progressdialog while duration of the connection.

This is my progressdialog

Pro = new ProgressDialog(getParent());
    Pro.setMessage("Enviando");
    Pro.setIndeterminate(false);
    Pro.setMax(100);
    Pro.setCancelable(false);
    Pro.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

this my asynctask

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]);
                    } 




 }

this my function of conexion "Look at this line of my doinbhackgroud" (objAcceso.conxDatosInPost(params[0],reqEntity); )

 public  String conxDatosInPost(String Direccion, MultipartEntity Parametros) throws Exception {
        BufferedReader in = null;
        try {
            HttpClient client = ClienteHttp();
            HttpPost request = new HttpPost(Direccion);
            request.setEntity(Parametros);
            HttpResponse response = client.execute(request);
            in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

            StringBuffer sb = new StringBuffer("");
            String line = "";
            String NL = System.getProperty("line.separator");
            while ((line = in.readLine()) != null) {
                sb.append(line + NL);
            } 
            in.close();

            String result = sb.toString();
            Log.d("El resultado de cnxposin es :-----------  ",  result +"fn");

            return result;
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

¿as I can do to update my progress dialog While the connection lasts ?

UPDATE

I have problems to calculate the size of the file to insert (video in this case) and to see the progress of the upload to the server at each times

find not the way to do this

I would like to know if there was the possibility of some listener progresslistener style?

please could help me or give me a hint

Upvotes: 0

Views: 2055

Answers (3)

Delari Jesus
Delari Jesus

Reputation: 411

ultimately solve my problem as follows

this is how my code is

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;
            }

and this is my new class

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);
    }
}

Upvotes: 0

Binoy Babu
Binoy Babu

Reputation: 17119

You can use a handler to update ProgressDialog according to the status of stuff happening in the doInBackground(..) of AsyncTask. I think this example will be perfect for you. Just send the Handler a Message using handler.sendmsg(msg) so that it would update the ProgressDialog.

Upvotes: 0

Praful Bhatnagar
Praful Bhatnagar

Reputation: 7435

check out the following example from official java doc:

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");
     }
 }

Upvotes: 2

Related Questions