Autore Topic: Problema visualizzazione progressDialog  (Letto 868 volte)

Offline maro

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Htc Evo 3D, Hp Touchpad
  • Sistema operativo:
    Windows 7
Problema visualizzazione progressDialog
« il: 03 Aprile 2012, 16:43:25 CEST »
0
Salve,

mi sto scervellando da giorni su un problema che penso sia banale e cioè far visualizzare la progressione del AsyncTask in una progressDialog(STYLE_HORIZONTAL).
Il programma funziona e mi carica tutti i dati aggiornando anche la progressaDialog con il metodo
Codice (Java): [Seleziona]
protected void onProgressUpdate(Integer... values) {
                Log.d("cdtype", "dentro onProgressUpdate values:"+values[0]);
                dialog.setProgress(values[0]);
        }

pero non mi viene visualizzato l'andamento sul telefono, cioè la percentuale non aumenta e la barra non si completa


il codice della mia AsyncTask è questo:
Codice (Java): [Seleziona]
private class LoadingStuffTask extends AsyncTask<Void, Integer, ArrayList<CdData>> {
               
                private int progress = 0;
                private ProgressDialog dialog;
                private ArrayList<CdData> parsedData=new ArrayList<CdData>();
               
                protected void onPreExecute() {
                        dialog = new ProgressDialog(ChoseActivityCd.this);
                dialog.setMessage("Caricamento dei dati");
                dialog.setIndeterminate(true);
                dialog.setCancelable(false);
                dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                dialog.show();
            }

        @Override
        protected ArrayList<CdData> doInBackground(Void... params) {
                publishProgress(progress);
               
            parseXml(getApplicationContext().getResources().openRawResource(R.raw.cd));

            return getParsedData(); // stringa passata a onPostExecute    
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
                Log.d("cdtype", "dentro onProgressUpdate values:"+values[0]);
                dialog.setProgress(values[0]);
        }

        @Override
        protected void onPostExecute(ArrayList<CdData> result) {
                dialog.dismiss();
                data = result;
        }
       
        public ArrayList<CdData> getParsedData() {  //metodo di accesso alla struttura dati
            return parsedData;
        }
       
        public void parseXml(InputStream cd){
                Document doc;
               
            try {
               
                doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(cd);
                Element root=doc.getDocumentElement();
               
                //publishProgress(progress = 5*100);
                   
                //NodeList notes=root.getElementsByTagName("note");
                NodeList notes=root.getChildNodes();
                   
                for(int i=0;i<notes.getLength();i++){//per ogni
                        Node c= notes.item(i);//nodo
                   
                        if(c.getNodeType()==Node.ELEMENT_NODE){
                               
                        CdData cdData=new CdData();
                                   
                        Element note=(Element)c;
                                                                     
                        String id=note.getAttribute("id");
                                   
                        cdData.setTipo(id);
                                                           
                        NodeList noteDetails=c.getChildNodes();
                        for(int j=0;j<noteDetails.getLength();j++){
                                Node c1=noteDetails.item(j);
                            if(c1.getNodeType()==Node.ELEMENT_NODE){
                               
                                //publishProgress(progress = progress + 100);
                               
                                Element detail=(Element)c1;
                                String nodeName=detail.getNodeName();
                                String nodeValue=detail.getFirstChild().getNodeValue();
                               
                               
                                if(nodeName.equals("marca"))
                                        cdData.setMarca(nodeValue);
                               
                                if(nodeName.equals("nome"))
                                        cdData.setNome(nodeValue);
                               
                                if(nodeName.equals("formato"))
                                        cdData.setFormato(nodeValue);
                                                           
                                if(nodeName.equals("capacita"))
                                        cdData.setCapacita(nodeValue);
                               
                                if(nodeName.equals("durata"))
                                        cdData.setDurata(nodeValue);
                               
                                if(nodeName.equals("velocita"))
                                        cdData.setVelocita(nodeValue);
                               
                                if(nodeName.equals("stampabile"))
                                        cdData.setStampabile(nodeValue);
                               
                                if(nodeName.equals("masterizzabile"))
                                        cdData.setMasterizzabile(nodeValue);
                               
                                if(nodeName.equals("colore"))
                                        cdData.setColore(nodeValue);
                               
                                if(nodeName.equals("immagine"))
                                        cdData.setUrlImmagine(nodeValue);
                               
                                if(nodeName.equals("info"))
                                        cdData.setInfo(nodeValue);
                               
                                if(nodeName.equals("provenienza"))
                                        cdData.setProvenienza(nodeValue);
                               
                                if(nodeName.equals("barre"))
                                        cdData.setCodiceBarre(nodeValue);
                               
                                if(nodeName.equals("ean"))
                                        cdData.setEan(nodeValue);
                              }
                            }
                                parsedData.add(cdData);
                                //publishProgress(progress = progress +i*10);
                        }
                                if(i == notes.getLength()/2){
                                        publishProgress(progress = 50);
                                }else if(i/2 < notes.getLength()/2){
                                        publishProgress(progress = progress + 10);
                                }else if(i/2 > notes.getLength()/2){
                                        publishProgress(progress = progress + 10);
                                }
                        }
           
            } catch (SAXException e) {
            } catch (IOException e) {
            } catch (ParserConfigurationException e) {
            } catch (FactoryConfigurationError e) {
            }
        }

         }

Qual'è secondo voi il problema?dove sbaglio?

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:Problema visualizzazione progressDialog
« Risposta #1 il: 03 Aprile 2012, 16:59:21 CEST »
+1
Devi rimuovere

Codice (Java): [Seleziona]
dialog.setIndeterminate(true);
e aggiungere

Codice (Java): [Seleziona]
dialog.setIndeterminate(false);
dialog.setMax(100); // nel tuo caso la dimensione di values, oppure 100 e poi in dialog.setProgress il valore in proporzione
dialog.setCurrentProgress(0);
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline maro

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Htc Evo 3D, Hp Touchpad
  • Sistema operativo:
    Windows 7
Re:Problema visualizzazione progressDialog
« Risposta #2 il: 03 Aprile 2012, 18:46:31 CEST »
0
Devi rimuovere

Codice (Java): [Seleziona]
dialog.setIndeterminate(true);
e aggiungere

Codice (Java): [Seleziona]
dialog.setIndeterminate(false);
dialog.setMax(100); // nel tuo caso la dimensione di values, oppure 100 e poi in dialog.setProgress il valore in proporzione
dialog.setCurrentProgress(0);

ciao,

grazie mille per la dritta, con le tue indicazioni funziona a dovere.

Off-Topic:
Ma come è possibile che nelle api non ci siano riferimenti al significato di quei metodi?
mah secondo me è grave sta cosa