Autore Topic: Parsing Troppo Lento  (Letto 1217 volte)

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Parsing Troppo Lento
« il: 08 Gennaio 2013, 16:16:44 CET »
0
Salve ragazzi, ho un grosso problema, infatti nella mia app il parsing del xml risulta essere lento, troppo lento! Può durare anche diversi minuti.
Potete darmi qualche dritta? C'è qualcosa di sbagliato nel codice:
Codice (Java): [Seleziona]
 // parsing XML
                 if (result!=null) try {
                   
                    // aggiorno la progress dialog
                    publishProgress("Download dei Coupons in corso");
                   
                    // 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("coupon");
                   
       
                   
                    for (ncoupon=0; ncoupon<nl.getLength() ; ncoupon++) {
                       
                   
                    if (nl!=null && nl.getLength()>0) {
                       domain = doc.getElementsByTagName("domain").item(ncoupon).getFirstChild().getNodeValue();
                       description = doc.getElementsByTagName("description").item(ncoupon).getFirstChild().getNodeValue();
                       link =doc.getElementsByTagName("link").item(ncoupon).getFirstChild().getNodeValue();
                       
                 //Log.e("DDD", "Domain : "+domain+", Description : "+description);
                       
                    } else {
                       domain = "";
                       description = "";
                       link = "";
                       
                    }

Se non ci trovate nulla di strano allora devo provare con l'utilizzo del GZIPInputStream in quanto dispongo anche del file xml.gz, potete però aiutarmi a modificare il codice mettendo l'ImputStream che non so da dove rifarmi?
Mille grazie  :-)
Domani Smetto.

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Parsing Troppo Lento
« Risposta #1 il: 08 Gennaio 2013, 16:50:47 CET »
+1
senza sapere com'è l'xml, se il codice è tutto (magari scrivi in un db nel frattempo), se l'xml lo scarica velocemente o se anche il download influisce... è impossibile aiutarti
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:Parsing Troppo Lento
« Risposta #2 il: 08 Gennaio 2013, 16:59:01 CET »
0
senza sapere com'è l'xml, se il codice è tutto (magari scrivi in un db nel frattempo), se l'xml lo scarica velocemente o se anche il download influisce... è impossibile aiutarti

Hai ragione scusami, dunque questa è la parte dove mi connetto all'xml (http://www.coupapps.com/coupons_detailed.xml)
Codice (Java): [Seleziona]
@Override
              protected String doInBackground(String... params) {

                 result = null;
                 
                 
                 
                 
                 // interrogazione del web service
                 try {
                   
                    // aggiorno la progress dialog
                    publishProgress("Connessione a DigitalCoupon in corso");
                 
                   
                 // creo la richiesta URI di tipo GET  
                    URI uri;
                    uri = new URI("http",null,"www.coupapps.com",-1,"/coupons_detailed.xml", params[0],null);
                   
                    //Log.e("AAA", uri.toString()); url dell' xml
                   
                   //log del valore digitato in input
               Log.e("BBB", params[0].toString());
                   
                    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);
                   
                   
                  //Log.e("CCC", result.toString()); result è il parsing totale dell' xml
                   
               
                 } 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();
                 }
                 

questo è il parsing già scritto prima:

Codice (Java): [Seleziona]
 // parsing XML
                 if (result!=null) try {
                   
                    // aggiorno la progress dialog
                    publishProgress("Download dei Coupons in corso");
                   
                    // 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("coupon");
                   
       
                   
                    for (ncoupon=0; ncoupon<nl.getLength() ; ncoupon++) {
                       
                   
                    if (nl!=null && nl.getLength()>0) {
                       domain = doc.getElementsByTagName("domain").item(ncoupon).getFirstChild().getNodeValue();
                       description = doc.getElementsByTagName("description").item(ncoupon).getFirstChild().getNodeValue();
                       link =doc.getElementsByTagName("link").item(ncoupon).getFirstChild().getNodeValue();
                       
                 //Log.e("DDD", "Domain : "+domain+", Description : "+description);
                       
                    } else {
                       domain = "";
                       description = "";
                       link = "";
                       
                    }

e infine inserisco il file parsato in un db:
Codice (Java): [Seleziona]
  SQLiteDatabase database = (new DatabaseHelper(CT).getWritableDatabase());
                            ContentValues values = new ContentValues();
                        values.put("domain",  domain);
                        values.put("description", description );      
                        values.put("link", link);
                       
                       
                        if(database!=null){
                                database.insert(TABLE_NAME, null, values);
                                database.close();
                        } else{
                            Log.e("MyAppError", "Database is null");
                        }
                       

Qualcosa potrebbe essere la causa della estrema lentezza?
Grazie
Domani Smetto.

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Parsing Troppo Lento
« Risposta #3 il: 08 Gennaio 2013, 17:33:56 CET »
+1
a me sto pezzo di codice proprio non piace....
prendi TUTTI i tag domain di TUTTI i coupon e poi ci prendi l'nesimo e poi il figlio...

sei già in un ciclo, in teoria (non ricordo la sintassi) se prendi direttamente il nodo "nl.getNode(nessimo)" e poi da quello ci fai getChild("domain") ecc velocizzi di molto....

Codice (Java): [Seleziona]
domain = doc.getElementsByTagName("domain").item(ncoupon).getFirstChild().getNodeValue();
                       description = doc.getElementsByTagName("description").item(ncoupon).getFirstChild().getNodeValue();
                       link =doc.getElementsByTagName("link").item(ncoupon).getFirstChild().getNodeValue();
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:Parsing Troppo Lento
« Risposta #4 il: 08 Gennaio 2013, 17:58:56 CET »
0
a me sto pezzo di codice proprio non piace....
prendi TUTTI i tag domain di TUTTI i coupon e poi ci prendi l'nesimo e poi il figlio...

sei già in un ciclo, in teoria (non ricordo la sintassi) se prendi direttamente il nodo "nl.getNode(nessimo)" e poi da quello ci fai getChild("domain") ecc velocizzi di molto....

Codice (Java): [Seleziona]
domain = doc.getElementsByTagName("domain").item(ncoupon).getFirstChild().getNodeValue();
                       description = doc.getElementsByTagName("description").item(ncoupon).getFirstChild().getNodeValue();
                       link =doc.getElementsByTagName("link").item(ncoupon).getFirstChild().getNodeValue();

Grazie mille per l'aiuto che mi stai dando Nicola_D, sto provando a scrivere ma non riesco a trovare la sintassi giusta, sono un principiante in programmazione scusami.
Stai dicendo all'incirca una cosa del genere:
Codice (Java): [Seleziona]
domain = doc.getNode("ncoupon").getChild(domain);
però non riesco a trovare un modo di scriverlo, ne direttamente su eclipse, ne trovo delle spiegazioni in rete  :-(
Domani Smetto.

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Parsing Troppo Lento
« Risposta #5 il: 08 Gennaio 2013, 20:21:53 CET »
+1
leggendo la documentazione (che è gratis) si può capire molto....

Codice (Java): [Seleziona]
NodeList nl = doc.getElementsByTagName("coupon");
for (ncoupon=0; ncoupon<nl.getLength() ; ncoupon++) {
  Node couponNessimo = nl.item(ncoupon);
  NodeList figliNodoNessimo = couponNessimo.getChildNodes();
  for (int figlioN =0; figlioN < figliNodoNessimo.getLength(); figlioN++){
     Node childOfCoupon = figliNodoNessimo.item(figlioN);
     if ("domain".equalsIgnoreCase(childOfCoupon.getNodeName())){
       domain = childOfCoupon.getNodeValue();
     }else if ("description".equalsIgnoreCase(childOfCoupon.getNodeName())){
       description = childOfCoupon.getNodeValue();
    }else if ("link".equalsIgnoreCase(childOfCoupon.getNodeName())){
       link = childOfCoupon.getNodeValue();
    }
 }
}

senza eclipse e senza compilare, quindi adattalo...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:Parsing Troppo Lento
« Risposta #6 il: 09 Gennaio 2013, 10:33:01 CET »
0
leggendo la documentazione (che è gratis) si può capire molto....

Codice (Java): [Seleziona]
NodeList nl = doc.getElementsByTagName("coupon");
for (ncoupon=0; ncoupon<nl.getLength() ; ncoupon++) {
  Node couponNessimo = nl.item(ncoupon);
  NodeList figliNodoNessimo = couponNessimo.getChildNodes();
  for (int figlioN =0; figlioN < figliNodoNessimo.getLength(); figlioN++){
     Node childOfCoupon = figliNodoNessimo.item(figlioN);
     if ("domain".equalsIgnoreCase(childOfCoupon.getNodeName())){
       domain = childOfCoupon.getNodeValue();
     }else if ("description".equalsIgnoreCase(childOfCoupon.getNodeName())){
       description = childOfCoupon.getNodeValue();
    }else if ("link".equalsIgnoreCase(childOfCoupon.getNodeName())){
       link = childOfCoupon.getNodeValue();
    }
 }
}

senza eclipse e senza compilare, quindi adattalo...

Grazie Nicola_D, io ho letto e riletto tutta la documentazione su http://developer.android.com sui nodi, sui cicli, sui getNode ma non riesco a scrivere sto benedetto codice in modo che funzioni, scusami ma sono un principiante è da poco che programmo.
Questo è il codice:
Codice (Java): [Seleziona]
// esplorazione xml
                   
                     
                      NodeList nl = doc.getElementsByTagName("coupon"); {
             
                         Node couponNessimo = nl.item(ncoupon);
                         NodeList ml = couponNessimo.getChildNodes();
                         
                         for (int ncoupon =0; ncoupon < ml.getLength(); ncoupon++){
                            Node childOfCoupon = ml.item(ncoupon);
                           
                            if ("domain".equalsIgnoreCase(childOfCoupon.getNodeName())){
                              domain = childOfCoupon.getNodeValue();
                             
                            }else if ("description".equalsIgnoreCase(childOfCoupon.getNodeName())){
                               description = childOfCoupon.getNodeValue();
                             
                            }else if ("link".equalsIgnoreCase(childOfCoupon.getNodeName())){
                                link = childOfCoupon.getNodeValue();

  Log.e("DDD", "Domain : "+domain+", Description : "+description+", Link : "+link);


      }
}

E questo è ciò che è mostrato nel Logcat:


Codice: [Seleziona]

01-09 09:23:01.616: E/BBB(469): zoo
01-09 09:23:03.076: D/dalvikvm(469): GC_FOR_MALLOC freed 3019 objects / 127544 bytes in 69ms
01-09 09:23:04.106: D/dalvikvm(469): GC_FOR_MALLOC freed 229 objects / 12400 bytes in 41ms
01-09 09:23:04.616: D/dalvikvm(469): GC_FOR_MALLOC freed 2471 objects / 527880 bytes in 46ms
01-09 09:23:05.036: D/dalvikvm(469): GC_FOR_MALLOC freed 4199 objects / 174576 bytes in 52ms
01-09 09:23:05.486: D/dalvikvm(469): GC_FOR_MALLOC freed 4391 objects / 191376 bytes in 57ms
01-09 09:23:05.896: E/DDD(469): Domain : null, Description : null, Link : null


Il risultato è null, dove sbaglio?
Mille grazie.
Domani Smetto.

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Parsing Troppo Lento
« Risposta #7 il: 09 Gennaio 2013, 11:08:06 CET »
+1
eh non ti so dire cosi, dovrei farmi un progetto e provare, onestamente non ho tempo oggi...
prova a farti un progettino java normale in cui fai il download ed il parsing, lo puoi provare più velocemente e puoi debuggare con semplicità
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:Parsing Troppo Lento
« Risposta #8 il: 09 Gennaio 2013, 11:17:38 CET »
0
eh non ti so dire cosi, dovrei farmi un progetto e provare, onestamente non ho tempo oggi...
prova a farti un progettino java normale in cui fai il download ed il parsing, lo puoi provare più velocemente e puoi debuggare con semplicità

Grazie non importa che mi dedichi altro tempo, hai già fatto tanto per me, grazie veramente in qualche modo la risolvo, sto continuando a studiarmi la documentazione riuscirò a capire come risolvere sto parse  :-)
Grazie ancora Nicola_D
Domani Smetto.

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:Parsing Troppo Lento
« Risposta #9 il: 10 Gennaio 2013, 09:40:12 CET »
0
Ciao Nicola_D, alla fine ho risolto semplicemente mettendo una splash screen, dividendo l'applicazione in più activity il tempo per il parsing è decisamente migliorato, nella splash effettuo quindi il parsing e copio i dati nel db, e successivamente in un altra activity effettuo le query.
Mi trovo però di fronte ad un altro problema, probabilmente semplice, ma aimè ignoro fin troppe cose di programmazione java e android.
Infatti il parse nella splash funziona, ma non mostra l'immagine di background che viene mostrata solo per alcuni secondi quando il parsing è finito, prima di passare all'activity successiva, so che per mostrare tale immagine di background devo utilizzare un Thread, ma non riesco a impostarlo, spero quindi che tu possa nuovamente darmi un aiuto.
Ecco il codice della splash:
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 description = "";

        String domain = "";

        String link = "";

        int ncoupon=0;

        String result=null;

       
           /** Called when the activity is first created. */
           @Override
           public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.splash);
              CT = this;
             
           
                               
                                 // 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 {
                                   
                                 
                                 
                                    // 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("coupon");
                                   
                       
                                   
                                    for (ncoupon=0; ncoupon<nl.getLength() ; ncoupon++) {
                                       
                                   
                                    if (nl!=null && nl.getLength()>0) {
                                       domain = doc.getElementsByTagName("domain").item(ncoupon).getFirstChild().getNodeValue();
                                       description = doc.getElementsByTagName("description").item(ncoupon).getFirstChild().getNodeValue();
                                       link =doc.getElementsByTagName("link").item(ncoupon).getFirstChild().getNodeValue();
                                       
                                 Log.e("DDD", "Domain : "+domain+", Description : "+description);
                                       
                                    } else {
                                       domain = "";
                                       description = "";
                                       link = "";
                                       
                                    }  
                                   
                                  SQLiteDatabase database = (new DatabaseHelper(CT).getWritableDatabase());
                            ContentValues values = new ContentValues();
                        values.put("domain",  domain);
                        values.put("description", description );      
                        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());
                                         }
                                         
                                       
                                     



new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {

                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();
}
}


come devo inserire il thread? Grazie  :-)
« Ultima modifica: 10 Gennaio 2013, 09:44:09 CET da Valeboccaccio »
Domani Smetto.

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Parsing Troppo Lento
« Risposta #10 il: 10 Gennaio 2013, 11:27:41 CET »
+1
oddio è un po un disastro il tuo codice (senza offesa)...
il set content view lo imposti dopo il parsing, ed è per quello che vedi lo splash solo per poco...
poi comunque non fai il parsing in un secondo thread ma nella onCreate... insomma, dovresti guardati un paio di tutorial.
Ce n'è uno sugli splash screen qui sul forum (lo dovresti trovare facilmente) e per il download dei dati su un'altro thread ce ne sono nelle sezioni listview o gestione dati!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:Parsing Troppo Lento
« Risposta #11 il: 10 Gennaio 2013, 12:11:05 CET »
0
oddio è un po un disastro il tuo codice (senza offesa)...
il set content view lo imposti dopo il parsing, ed è per quello che vedi lo splash solo per poco...
poi comunque non fai il parsing in un secondo thread ma nella onCreate... insomma, dovresti guardati un paio di tutorial.
Ce n'è uno sugli splash screen qui sul forum (lo dovresti trovare facilmente) e per il download dei dati su un'altro thread ce ne sono nelle sezioni listview o gestione dati!

Grazie Nicola_D comunque il parsing lo imposto dopo il set content view, ho risolto semplicemente mettendo l'Handler
Codice (Java): [Seleziona]
new Handler().postDelayed(new Runnable() {

             @Override
              public void run() {
dopo il set content view, e all'interno dell'Handler il parsing, in questo modo durante il parsing visualizzo il background.

Posso farti un ultima domanda? poi ti lascio in pace  :-)
Le corrispondenze della query sul db le inserisco dentro un List<String> new ArrayList<String>() che passo tramite Intent getApplicationContext 
all'ultima activity in modo da visualizzare tali corrispondenza a schermo.
Al momento mostro a schermo soltanto una corrispondenza, cioè il tag domain tramite una ListView e ho reso cliccabile ogni riga tramite un setOnItemClickListener.

Per capirci qualcosa, il codice molto semplice è il seguente:

Codice (Java): [Seleziona]
public class Activity2 extends Activity {
       
        private ListView ListView;     
        List<String> LinkArray = new ArrayList<String>();
        List<String> DomainArray = new ArrayList<String>();
   
   
        private ArrayAdapter<String> arrayAdapter;
       
               
               
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.act2);
               
                // l'intent di questa activity
                Intent intent=getIntent();
               
                final String pkg=getPackageName();
               
                 // Inizializzo il Listview
        ListView = (ListView) findViewById(R.id.ListView);
       
       
       
        DomainArray.addAll(intent.getStringArrayListExtra(pkg+".Domain"));
        LinkArray.addAll (intent.getStringArrayListExtra(pkg+".Link"));
       
     
        //Log.e("UUU", LinkArray.toString());
     
        arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, DomainArray);
       


        // Uso il SetAdapter
        ListView.setAdapter(arrayAdapter);
       
        ListView.setOnItemClickListener(new OnItemClickListener() {
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://"+LinkArray.get(position)));
                                   Log.e("AAA", LinkArray.get(position));
                                                  startActivity(browserIntent);
                               
                               
       
                        }
                });
         
       
    }

}

La domanda è: Posso tramite una ListView visualizzare a schermo più ArrayList?
Cioè è possibile inserire in una ListView alcuni TextView figli?

Spero di essere stato il più chiaro possibile e mi rendo conto che il mio codice possa far schifo, sono un nubbio  :-)
Domani Smetto.

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Parsing Troppo Lento
« Risposta #12 il: 10 Gennaio 2013, 15:23:45 CET »
+1
puoi usare le Expandable list view, oppure se ti fai un adapter personalizzato (ci sono tanti tutorial) puoi far vedere piu stringhe in una listview.

PS: Prima di postare il codice formattalo, è illeggibile cosi!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:Parsing Troppo Lento
« Risposta #13 il: 10 Gennaio 2013, 17:22:19 CET »
0
puoi usare le Expandable list view, oppure se ti fai un adapter personalizzato (ci sono tanti tutorial) puoi far vedere piu stringhe in una listview.

PS: Prima di postare il codice formattalo, è illeggibile cosi!

Grazie Nicola_D, ho risolto basandomi sul tutorial di Qlimax  :-)
Domani Smetto.