Autore Topic: PROGRESSBAR: COMPLETAMENTO E BUTTON  (Letto 567 volte)

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
PROGRESSBAR: COMPLETAMENTO E BUTTON
« il: 15 Gennaio 2013, 12:35:17 CET »
0
Salve ragazzi, ho due problemi, che non riesco a risolvere essendo un principiante, vi spiego ho una splashscreen dove effettuo il parsing di un xml, ho messo una progressdialog progressbar ma ho questi due problemi:
1) non riesco a scrivere il codice in modo che la mia progressbar si completi, infatti essa c'è ma non si riempie, resta vuota allo 0%
2) non riesco a mettere un button che grazie al click mi interrompa il parsing e che quindi mi passi alla successiva activity
vi posto il codice della splashscreen:

Dichiarazioni:
Codice (Java): [Seleziona]
public class SplashScreen extends Activity {

        private static final int SPLASH_TIME = 3 * 1000;// 3 seconds
        //nome della tabella
       
         private static final String TABLE_NAME = "coupon";

        // variabili utilizzate
       
Context CT = null;
HttpClient client=null;
String domain = "";
String program = "";
//String description = "";
String end_date = "";
String percentage = "";
String discount = "";
String link = "";
int ncoupon=0;
String result=null;
ProgressDialog progressBar;  
private int progressBarStatus = 0;
private long fileSize = 0;
private Handler progressBarHandler = new Handler();
       

inizializzazione progressbar

Codice (Java): [Seleziona]
/** Called when the activity is first created. */
           @Override
           public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.splash);
              CT = this;
             
              final ProgressDialog progressBar = new ProgressDialog(this);
                        progressBar.setCancelable(true);
                        progressBar.setMessage("Aggiornamento dei Coupons in corso...");
                        progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                        progressBar.setProgress(0);
                        progressBar.setMax(100);
                        progressBar.show();
                       
             
                        //reset progress bar status
                        progressBarStatus = 0;
                       
                        //reset filesize
                        fileSize = 0;

Handler contentente il parsing e l'inserimento dei dati in un db

Codice (Java): [Seleziona]
       new Handler().postDelayed(new Runnable() {
       
             @Override
              public void run() {
         

                 // interrogazione del web service
                                 try {
                                         
                                 
                                   
                                   
                                // creo la richiesta URI di tipo GET  
                                    URI uri;
                              uri = new         URI("http",null,"www.coupapps.com",1,"/coupons_detailed.xml","", null);
                                   
                                    HttpUriRequest get = new HttpGet(uri);  
                                   
                                    // istanzio il client HTTP
                                    client = new DefaultHttpClient();
                                   
                                    // istanzio il gestore automatico di risposte HTTP
                                    ResponseHandler<String> responseHandler = new BasicResponseHandler();
       
                                    // eseguo la richiesta
                                    result = client.execute(get,responseHandler);
                                   
                   
                                   setContentView(R.layout.splash);
                                 } catch (HttpResponseException e) {
                                    // gestisce le risposte diverse da HTTP
                                    Log.w("COUPAPPS1","HTTP Response Exception : "+e.toString());
                                 } catch (Exception e) {
                                    Log.w("COUPAPPS1","Error : "+e.toString());
                                 } finally {
                                    if (client != null) client.getConnectionManager().shutdown();
                                 }
                           
                                 
                                 
                               // parsing XML
                                 if (result!=null) try {
                                   
                                    DocumentBuilderFactory dbf;
                                    dbf = DocumentBuilderFactory.newInstance();
                                    DocumentBuilder db = dbf.newDocumentBuilder();
                                   
                        // parsing dell'xml
                                    Document doc = db.parse(new InputSource(new StringReader(result)));
                                   
                                    // esplorazione xml
                                    NodeList nl = doc.getElementsByTagName("coupon");
                                   
                       
                                   
                                    for (ncoupon=0; ncoupon<nl.getLength() ; ncoupon++) {
                                       
                                   
                                    if (nl!=null && nl.getLength()>0) {
                                       domain = doc.getElementsByTagName("domain").item(ncoupon).getFirstChild().getNodeValue();
                                       program = doc.getElementsByTagName("program").item(ncoupon).getFirstChild().getNodeValue();
                                       //description = doc.getElementsByTagName("description").item(ncoupon).getFirstChild().getNodeValue();
                                       end_date = doc.getElementsByTagName("end_date").item(ncoupon).getFirstChild().getNodeValue();
                                       percentage = doc.getElementsByTagName("percentage").item(ncoupon).getFirstChild().getNodeValue();
                                       discount = doc.getElementsByTagName("discount").item(ncoupon).getFirstChild().getNodeValue();
                                       link =doc.getElementsByTagName("link").item(ncoupon).getFirstChild().getNodeValue();
                                       
                                 Log.e("DDD", "Domain : "+domain+", Program : "+program+", End_Date : "+end_date+", Percentage : "+percentage+", Discount : "+discount+", Link : "+link);
                                       
                                    } else {
                                       domain = "";
                                       program = "";
                                       //description = "";
                                       end_date = "";
                                       percentage = "";
                                       discount = "";
                                       link = "";
                                       
                                    }  
                                   
                                 
                                           
                                   
                                   
                                  SQLiteDatabase database = (new DatabaseHelper(CT).getWritableDatabase());
                            ContentValues values = new ContentValues();
                        values.put("domain",  domain);
                        values.put("program",  program);
                        //values.put("description", description );
                        values.put("end_date",  end_date);
                        values.put("percentage",  percentage);
                        values.put("discount",  discount);
                        values.put("link", link);
                       
                       
                        if(database!=null){
                                database.insert(TABLE_NAME, null, values);
                                database.close();
                        } else{
                            Log.e("MyAppError", "Database is null");
                        }
                       }
                              }
                                 
                               
                                   
                                  catch (ParserConfigurationException e) {
                                         Log.w("COUPAPPS1","Parser Configuration Exception : "+e.toString());
                                          } catch (SAXException e) {
                                         Log.w("COUPAPPS1","SAX Exception : "+e.toString());
                                         } catch (IOException e) {
                                          Log.w("COUPAPPS1","IO Exception : "+e.toString());
                                         }

chiusura della progressdialog e dell'activity
Codice (Java): [Seleziona]
                                    //PD:
                                                        progressBarHandler.post(new Runnable() {
                                                                public void run() {
                                                                        progressBar.setProgress(progressBarStatus);
                                                                       
                                                                        progressBar.dismiss();
                                                                }
                                                        });
                                                //}
                                         
                 
           
              Intent intent = new Intent(SplashScreen.this,
                                Activity1.class);
                startActivity(intent);

                SplashScreen.this.finish();

                overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

               
               
               
               
               
        }
   //}
}, SPLASH_TIME);

new Handler().postDelayed(new Runnable() {
          @Override
          public void run() {
                 }
            }, SPLASH_TIME);

}


@Override
public void onBackPressed() {
this.finish();
super.onBackPressed();
}
}

Grazie per l'aiuto  :-)
Domani Smetto.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:PROGRESSBAR: COMPLETAMENTO E BUTTON
« Risposta #1 il: 15 Gennaio 2013, 14:31:15 CET »
+1
Non ho visto bene il codice, ma credo sia perchè esegui nel thread di UI la funzione di cui vuoi monitorare l'avanzamento (cosa impossibile di principio).

In genere la ProgressBar è abbinata ad un task esterno (la tua funzione) eseguito in AsyncTask, per cui all'avanzare dell'esecuzione del task stesso, nell'AsyncTask viene utilizzata l'apposita funzione per aggiornare la UI. La chiave sta nel fatto che la tua funzione viene di fatto eseguita in un thread diverso da quello di UI.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:PROGRESSBAR: COMPLETAMENTO E BUTTON
« Risposta #2 il: 15 Gennaio 2013, 14:38:41 CET »
0
Non ho visto bene il codice, ma credo sia perchè esegui nel thread di UI la funzione di cui vuoi monitorare l'avanzamento (cosa impossibile di principio).

In genere la ProgressBar è abbinata ad un task esterno (la tua funzione) eseguito in AsyncTask, per cui all'avanzare dell'esecuzione del task stesso, nell'AsyncTask viene utilizzata l'apposita funzione per aggiornare la UI. La chiave sta nel fatto che la tua funzione viene di fatto eseguita in un thread diverso da quello di UI.

Non capisco però come risolverla, in più credevo di far giusto nell'adottare l'uso di un Handler invece che un AsyncTask, come posso risolverla quindi?
Domani Smetto.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:PROGRESSBAR: COMPLETAMENTO E BUTTON
« Risposta #3 il: 15 Gennaio 2013, 15:57:20 CET »
+1
In questo tutorial di diverso tempo fa, ma sempre valido nei concetti, faccio una richiesta http all'interno di un asynctask, faccio xml parsing e  e gestisco una progressdialog. Penso sia abbastanza semplice da comprendere facilmente l'approccio tipico che è necessario adottare.

[facile] HttpBookSearch: AsyncTask, HttpClient, XML parsing, ProgressDialog - Android Developers Italia
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:PROGRESSBAR: COMPLETAMENTO E BUTTON
« Risposta #4 il: 15 Gennaio 2013, 17:27:07 CET »
0
In questo tutorial di diverso tempo fa, ma sempre valido nei concetti, faccio una richiesta http all'interno di un asynctask, faccio xml parsing e  e gestisco una progressdialog. Penso sia abbastanza semplice da comprendere facilmente l'approccio tipico che è necessario adottare.

[facile] HttpBookSearch: AsyncTask, HttpClient, XML parsing, ProgressDialog - Android Developers Italia

Grazie bradipao, la mia applicazione si basa infatti sul tuo tutorial  :-)
Domani Smetto.

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:PROGRESSBAR: COMPLETAMENTO E BUTTON
« Risposta #5 il: 16 Gennaio 2013, 12:18:11 CET »
0
Ho risolto il fatto della progress bar con questo topic android - Set Progress of Dialog - Stack Overflow  :-)
« Ultima modifica: 16 Gennaio 2013, 13:05:40 CET da Valeboccaccio »
Domani Smetto.