studio progressbar progreso personalizar espera ejemplo dialogo cargando barra bar android upload httpclient httpurlconnection progress

progreso - progressbar android circle



¿Hay alguna forma de subir el progreso de carga correctamente con HttpUrlConncetion? (2)

El Blog de Desarrolladores de Android recomienda utilizar HttpURLConnection no sea HttpClient de apache ( http://android-developers.blogspot.com/2011/09/androids-http-clients.html ). Tomo el consejo y tengo problemas para informar el progreso de carga de archivos.

mi código para tomar el progreso es así:

try { out = conncetion.getOutputStream(); in = new BufferedInputStream(fin); byte[] buffer = new byte[MAX_BUFFER_SIZE]; int r; while ((r = in.read(buffer)) != -1) { out.write(buffer, 0, r); bytes += r; if (null != mListener) { long now = System.currentTimeMillis(); if (now - lastTime >= mListener.getProgressInterval()) { lastTime = now; if (!mListener.onProgress(bytes, mSize)) { break; } } } } out.flush(); } finally { closeSilently(in); closeSilently(out); }

Este código se ejecuta muy rápido para cualquier tamaño de archivo, pero el archivo aún se está cargando en el servidor. Recibo la respuesta del servidor. parece que HttpURLConnection caché todos los datos en el búfer interno cuando out.write() .

Entonces, ¿cómo puedo obtener el progreso real de carga de archivos? Parece que httpclient puede hacer eso, pero httpclient no es preferido ... ¿ httpclient idea?


utilice Asynctask para cargar archivos y cargarlos al servidor y crear un diálogo de progreso

1) ejecuta tu código en

doinbackground(){ your code here.. }

2) actualizar el progreso en

publishProgress("" + (int) ((total * 100) / lenghtOfFile)); //type this in the while loop before write..

3) y sobre la actualización del progreso

protected void onProgressUpdate(String... progress) { Progress.setProgress(Integer.parseInt(progress[0])); }

4) descartar el progreso en

protected void onPostExecute(String file_url) { dismissDialog(progress);


Encontré la explicación en el documento de desarrollador http://developer.android.com/reference/java/net/HttpURLConnection.html

To upload data to a web server, configure the connection for output using setDoOutput(true). For best performance, you should call either setFixedLengthStreamingMode(int) when the body length is known in advance, or setChunkedStreamingMode(int) when it is not. Otherwise HttpURLConnection will be forced to buffer the complete request body in memory before it is transmitted, wasting (and possibly exhausting) heap and increasing latency.

Al llamar a setFixedLengthStreamingMode() primero setFixedLengthStreamingMode() mi problema. Pero como se menciona en esta publicación , hay un error en Android que hace que HttpURLConnection caché todo el contenido incluso si se ha llamado a setFixedLengthStreamingMode() , que no se corrige hasta post-froyo. Así que uso HttpClient en lugar de pregingerbread.