PDA

Ver la Versión Completa : ayuda progressdialog


gohan0189
15/05/12, 21:35:20
como le hago para meter un progressdialog en lo que se cargan unos datos traidos de una BDD mediante un web service,

esto es lo que tengo pero el progressdialog me lo muestra ya que se han cargado los datos
esto va al momento de dar click a un boton

progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Cargando datos, porfavor espere..");
progressDialog.show();
thread.start();


SoapObject solicitud = new SoapObject(namespace, Metodo);
///
solicitud.addProperty("dato", edtxtpoliza.getText().toString());
solicitud.addProperty("dato1", edtxtinciso.getText().toString());
///
SoapSerializationEnvelope envoltorio = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envoltorio.dotNet = true;
envoltorio.setOutputSoapObject(solicitud);
HttpTransportSE transporte = new HttpTransportSE(url);

transporte.call(accionSoap, envoltorio);
Object result = (Object)envoltorio.getResponse();
JSONString=result.toString();

DecoderConfiguration config = new DecoderConfiguration(false, AutoValueObject.class);
AutoValueObject auto = (AutoValueObject)deserializeJsonResponse(config, JSONString);


edtxt1.setText((datoos1).toString());
edtxt2.setText((datoos2).toString());
edtxt3.setText((datoos3).toString());
edtxt4.setText((datoos4).toString());
edtxt5.setText((datoos5).toString());
edtxt6.setText((datoos6).toString());
realizado=true;

relizado en onvreate esta realizado=false;

y mi trhead lo tengo asi

Thread thread = new Thread(){
@Override
public void run()
{
while(realizado==false)
{
try{
this.sleep(5000);
} catch (InterruptedException ex) {
progressDialog.dismiss();
}
}
}
};

este para parar el progressDialog, ahora se me ocurre que talvez necesite meter un handler????? si es asi alguien podria decirme como o que hago mal??

kriogeN
16/05/12, 09:41:27
La petición de datos la haces en el hilo principal, así que el hilo que has puesto no vale para nada, porque el ProgressDialog también va en el hilo principal, y sólo se mostrará cuando el hilo principal esté libre, que coincide con la finalización de la petición de datos.

Para que funcione tendrás que meter la petición de datos en el hilo, y las líneas que actualicen la UI tendrás que meterlas en un Handler o en un runOnUiThread.

gohan0189
16/05/12, 17:06:40
no te entendi , no podrias e4xplicarmelo con un ejemplo ???

gohan0189
16/05/12, 18:09:55
ya ya me quedo muchas gracias....

gohan0189
16/05/12, 18:25:02
pero tengo una duda mi codigo quedo de la siguiente manera..

Thread thread = new Thread(){
@Override
public void run()
{
while(realizado==false)
{
try{
SoapObject solicitud = new SoapObject(namespace, Metodo);
///
solicitud.addProperty("dato1", edtxt1.getText().toString());
solicitud.addProperty("dato1", edtxt2.getText().toString());
///
SoapSerializationEnvelope envoltorio = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envoltorio.dotNet = true;
envoltorio.setOutputSoapObject(solicitud);
HttpTransportSE transporte = new HttpTransportSE(url);

try {
transporte.call(accionSoap, envoltorio);
Object result = (Object)envoltorio.getResponse();
JSONString=result.toString();

DecoderConfiguration config = new DecoderConfiguration(false, AutoValueObject.class);
auto = (AutoValueObject)deserializeJsonResponse(config, JSONString);
realizado=true;
}
catch (Exception e)
{
Toast toast = Toast.makeText(getApplicationContext(), "No se pudo comunicar con el servidor", Toast.LENGTH_SHORT);
toast.show();
// Log.i("error","mensaje",e);
// e.printStackTrace();
}
this.sleep(5000);
} catch (InterruptedException ex) {
//progressDialog.dismiss(); // es que aqui quiero checar porque no lo cierra aqui
Toast toast = Toast.makeText(getApplicationContext(), "No se pudo comunicar con el servidor", Toast.LENGTH_SHORT);
toast.show();
}
}
handler.sendEmptyMessage(0);
}
};

final Handler handler = new Handler(){
public void handleMessage(Message msg) {
edtxt1.setText((x1).toString());
edtxt2.setText((x2).toString());
edtxt3.setText((x3).toString());
edtxt4.setText((x4).toString());
edtxt5.setText((x5).toString());
edtxt6.setText((x6).toString());
relativelayout.setVisibility(View.VISIBLE);
btobtener.setVisibility(View.GONE);
progressDialog.dismiss();
}
};

pero al correrlo en debug no veo que entre al thread pero si me da los resultados esperados, como puedo hacerle para ver el funcionamiento del thread

kriogeN
16/05/12, 19:39:45
¿Qué quieres decir que no ves que entre al Thread? Ponle Log al principio y al final del Thread y así comprobarás si entra o no. Pero si te está dando resultados buenos es que si que entra.

gohan0189
17/05/12, 01:32:57
pues es que en debug no entra, le pongo un breakpoint en la linea

SoapObject solicitud = new SoapObject(namespace, Metodo);

por ejemplo, y no entra ahi es a lo que me refiero pero si hace todo lo que debe de hacer