Il Forum è consultabile solo in modalità lettura. Per domande o consigli iscriviti al nostro GRUPPO FACEBOOK / COMMUNITY cliccando qui

HELP CICLO FOR NON CORRETTO

Discussione in 'Development' iniziata da ValeBoccaccio, 26 Dic 2012.

  1. ValeBoccaccio

    ValeBoccaccio Baby Droid

    Iscritto:
    12 Dic 2012
    Messaggi:
    5
    "Mi Piace":
    0
    Salve ragazzi ho un problema con un ciclo for, vi spiego devo effettuare il parsing di una pagina XML e tramite un ciclo for prendere tutti i dati contenuti nella pagina e importarli in un db, il mio problema è col ciclo che invece di prendere tutti i tag della pagina ne prende uno soltanto.
    Vi mostro il codice utilizzato:
    Codice:
     
    // parsing XML
    	         if (result!=null) try {
    	            
    	            // aggiorno la progress dialog
    	            publishProgress("Parsing XML response...");
    	            
    	            // creo il document builder
    	            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("coupons");
    	            
    	           Log.e("XXX","Numero ricercato: "+nl.getLength());
    	            
    	            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();
    	               link =doc.getElementsByTagName("link").item(ncoupon).getFirstChild().getNodeValue();
    	           //Log.e("XXX", "Domain : "+domain+", Program : "+program+", Description : "+description);
    	            } else {
    	               domain = "";
    	               program = "";
    	               description = "";
    	               link = ""; 
    	           }
    	            }
    
    Il logcat mi mostra infatti che il numero ricercato è pari a uno, dovrebbero invece essere un centinaio.
    Vi ringrazio :D
     
  2. acer1629

    acer1629 Worker Droid

    Iscritto:
    22 Ago 2012
    Messaggi:
    113
    "Mi Piace":
    22
    Questo è un metodo che ho limato e che uso spesso per leggere tag da xml, funziona benone :

    Codice:
    
    	public NodeList leggiTagFromXml(String tag){
    		
    		NodeList listaTagEstratti = null;
    		
    		String xmlUrl=Environment.getExternalStorageDirectory()+"/Folder/"+nomeFile;
    		InputStream obj_is = null; 
    		Document obj_doc = null; 
    		DocumentBuilderFactory doc_build_fact = null; 
    		DocumentBuilder doc_builder = null; 
    		
    		try {
    			obj_is = new FileInputStream(xmlUrl);  
    			doc_build_fact = DocumentBuilderFactory.newInstance(); 
    			doc_builder = doc_build_fact.newDocumentBuilder(); 
    			obj_doc = doc_builder.parse(obj_is); 
    			if(null != obj_doc) { 
    				org.w3c.dom.Element feed =  obj_doc.getDocumentElement(); 
    				listaTagEstratti = feed.getElementsByTagName(tag); 
    		    }
    		} catch (ParserConfigurationException e) {
    			gestisciEccezione();
    			//System.out.println("XML parse error: " + e.getMessage());
    		} catch (SAXException e) {
    			gestisciEccezione();
    			//System.out.println("Wrong XML file structure: " + e.getMessage());
    		} catch (IOException e) {
    			gestisciEccezione();
    			//System.out.println("I/O exeption: " + e.getMessage());
    		}
    		
    		return listaTagEstratti;
    		
    	}
    
    
    
    Lo richiami semplicemente :

    Codice:
    
    NodeList listaTagEstratti = leggiTagFromXml("whatilike"); 
    	    	if (listaTagEstratti!=null){ // C'è almeno un elemento
    
    	    		//Carico il vettore con i nodi estratti
    	    		 for (int indiceXml=0;indiceXml<listaTagEstratti.getLength();indiceXml++){
    	    			
    	    			try { // Se il tag c'è ma il valore dentro non c'è, si incazza senza try
    	 	    			Node tagEstrattoNode = listaTagEstratti.item(indiceXml);
    		 		       String valoreNodoLetto=tagEstrattoNode.getFirstChild().getNodeValue();
    		 			
    		 				
    	    			}catch (Exception e) {
    	    				Log.e("Exception",e.getMessage()); 
    					}		
    	 				
    	    		 }
    
    }
    
    
    Molto utile sopratutto per capire se un xml è formattato male o è corrotto (in quel caso chiama il metodo gestisciEccezione)

    Spero di averti aiutato.
    Ciao !