Ich muss eine Fortschrittsanzeige während der Analyse eines Download-XML zeigen.Android: Zeige Fortschrittsanzeige von Parse beim Herunterladen eines XML
Ich habe es zuerst heruntergeladen, und dann Parsing, aber ich möchte beide Aktion Parallelen tun.
Dies ist Teil meines Codes, dies zu tun, aber ich weiß nicht, wie man den Pogress-Indikator zeigt.
public class WS_Sincronizo extends AsyncTask<Void,Integer,List<Alertas>>{
private Context conte;
// Variable para controlar ventana de progreso
private Sincronizacion actividad;
private Alertas user;
private long totalSize;
private WaitForCancelTask wft;
private HttpPost httpPost;
private HttpClient httpClient;
private HttpContext localContext;
private List<Alertas> resultado;
private BaseDatosHelper miBBDDHelper;
private SQLiteDatabase db;
private SincronizarXmlHelper manejadorXML;
private String fecha_bd;
private HttpEntity resEntity;
public static double fileSize;
private double downloaded; // number of bytes downloaded
public WS_Sincronizo (Context conte,Object actividad, String fecha){
this.conte=conte;
this.actividad=(Sincronizacion) actividad;
this.fecha_bd=fecha;
fileSize = 0;
downloaded = 0;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
resultado=null;
//TimeOut si exece el tiempo límite
wft=new WaitForCancelTask(this,conte,Utiles.TimeOutWebServerSincro);
}
@Override
protected void onProgressUpdate(Integer... progress) {
// TODO Auto-generated method stub
actividad.progreso((int) (progress[0]));
if (progress[0].intValue()==100){
/*** CANCELO TIMEOUT ***/
wft.FinishWaitForCancelTask();
}
}
@Override
protected void onPostExecute(List<Alertas> rta) {
super.onPostExecute(rta);
// Envío mensaje vacio al manejador para indicar que ya terminó.
actividad.FinSincronizacion(rta);
}
@Override
protected void onCancelled() {
//Si había empezado una transacción la cierro
try{
db.releaseReference();
}catch (Exception e) {
// TODO: handle exception
}
httpPost=null;
httpClient.getConnectionManager().shutdown();
this.onPostExecute(null);
}
@Override
public List<Alertas> doInBackground(Void... params) {
httpClient = new DefaultHttpClient();
localContext = new BasicHttpContext();
httpPost = new HttpPost(Utiles.UrlWebService + "GetSincro");
try {
String version = conte.getPackageManager().getPackageInfo(conte.getPackageName(), 0).versionName;
multipartContent.addPart("fecha",new StringBody(fecha_bd));
multipartContent.addPart("version",new StringBody(version));
multipartContent.addPart("sistema",new StringBody(Utiles.SISTEMA));
httpPost.setEntity(multipartContent);
HttpResponse httpresponse = httpClient.execute(httpPost,localContext);
if(httpresponse.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK){
//Cancelo TimeOut porque resp es ok;
resEntity = httpresponse.getEntity();
if (resEntity != null) {
fileSize = resEntity.getContentLength();
//Log.d("SIZE:",MemoryStatus.formatSize((long)fileSize));
Log.d("SIZE:",String.valueOf(fileSize));
//Log.i("RESPONSE",EntityUtils.toString(resEntity));
SAXParserFactory fabrica = SAXParserFactory.newInstance();
SAXParser parser = fabrica.newSAXParser();
XMLReader lector = parser.getXMLReader();
try{
miBBDDHelper = new BaseDatosHelper(conte);
db=miBBDDHelper.SincronizarTablas();
manejadorXML = new SincronizarXmlHelper(db);
lector.setContentHandler(manejadorXML);
lector.parse(new InputSource(resEntity.getContent()));
// Obtengo el resultado del XML
resultado = manejadorXML.getListas();
}catch (Exception e){
}
finally {
// TODO: handle exception
resEntity.consumeContent();
if (db.inTransaction()) {
db.endTransaction();
}
db.close();
miBBDDHelper.close();
}
if(resultado.isEmpty()) {
throw null;
}
else {
return resultado;
}
// Si dio error la RESPUESTA del SERWEB
} else {
throw null;
}
// Si no recibo la cabecera ok ,fuera
} else {
throw null;
}
} catch (Exception e) {
// TODO Auto-generated catch block
// Log.d("Error",e.getMessage());
httpClient.getConnectionManager().shutdown();
return null;
}
}
Sorry, dieser Code ist innerhalb meiner "doInBackground()" Methode. – lolaylo21
oh toll! Dann würde der Rest sehr einfach sein, ich werde die Antwort aktualisieren – Shubhayu
Ich brauche Show-Fortschritt (in%, nicht Zeichenfolge) – lolaylo21