ダウンロードXMLを解析中に進捗インジケータバーを表示する必要があります。Android:XMLをダウンロード中に解析の進行状況を表示
私はそれを最初にダウンロードして解析しましたが、両方の動作を同時に行うことはできませんでした。
これはこれを行うためのコードの一部ですが、pogressインジケータの表示方法がわかりません。
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;
}
}
申し訳ありませんが、このコードは私の "doInBackground()"メソッドの中にあります。 – lolaylo21
すごいよ!残りの部分は非常にシンプルになりますが、私は答えを更新します – Shubhayu
私はあなたの要件に応じてそれを変更することができます(%ではなく、文字列ではない)%進捗表示 – lolaylo21