Autore Topic: AsyncTask: passare 2 tipi di dato diversi  (Letto 686 volte)

Offline Agosteeno

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
AsyncTask: passare 2 tipi di dato diversi
« il: 11 Maggio 2011, 15:49:32 CEST »
0
Salve a tutti, ho un'applicazione nella quale uso un AsyncTask, per contattare un server. Ho bisogno di passare a questo task sia dei valori stringa che un valore context (in pratica ho bisogno di far avere al task il valore del context dell'applicazione. Qualcuno ha idea di come fare? Come soluzione estrema e molto poco elegande sto' iniziando a pensare di creare un oggetto che contiene questi valori (delle stringhe e un context) e passare questo, ma mi sembra una cagata. Qualcuno ha idea di come risolvere?
Risparmia l'acqua, bevi birra...

Offline Agosteeno

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
Re:AsyncTask: passare 2 tipi di dato diversi
« Risposta #1 il: 11 Maggio 2011, 16:10:26 CEST »
0
Come non detto, ho risolto da solo. Il mio problema era che mi serviva il Context per condividere delle stringhe tra tutte le activity (tra cui appunto delle stringhe. Come fatto in questo tutorial http://www.anddev.it/index.php/topic,896.msg5704.html#msg5704. Semplicemente le stringhe che prima passavo come parametro ora le condivido (si tratta della url del server e altre informazioni di fatto globali) e quindi all'asynctask passo solo il context senza avere piu' problemi.
Risparmia l'acqua, bevi birra...

Offline Agosteeno

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
Re:AsyncTask: passare 2 tipi di dato diversi
« Risposta #2 il: 11 Maggio 2011, 17:46:01 CEST »
0
Continuo con questo thread perche' in realta' non riesco a farlo funzionare. In pratica ho questo codice:

questo il codice del task:
Codice (Java): [Seleziona]
public class mioTask extends
                AsyncTask<Context, String, String> {

                @Override
                protected String doInBackground(Context... ctx) {
                        // TODO Auto-generated method stub
                        Context c = ctx[0];
                        DatiCondivisiApplication datiCondivisiApp;
                       
                        [b]datiCondivisiApp = (DatiCondivisiApplication) c.getApplicationContext();[/b]
                        ...

e questo il codice dell'application:
Codice (Java): [Seleziona]
public class DatiCondivisiApplication extends Application {

        private static final String urlServer = "http://url_del_server";

        private static final String stringa1 = "valore1";
        private static final String stringa2 = "valore2";


        public String getUrlServer() {
                return urlServer;
        }
...

Naturalmente nel manifest e' stata messa la riga opportuna per l'application.

Il problema che mi da' e' un RunTimeException quando prova ad eseguire la riga evidenziata (datiCondivisiApp = (DatiCondivisiApplication) c.getApplicationContext();) e non capisco per quale motivo.
Qualcuno ha idea di cosa possa essere?
Risparmia l'acqua, bevi birra...

Offline MarcoDuff

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 941
  • Respect: +156
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:AsyncTask: passare 2 tipi di dato diversi
« Risposta #3 il: 11 Maggio 2011, 17:49:26 CEST »
0
logcat
Le mie Applicazioni Android | Il mio Blog

Io faccio parte del Gruppo AndDev.it LOGTFO, tu no? Allora GTFO!
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto  alla destra del titolo del post. (Ricky` rulez)

Offline Agosteeno

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
Re:AsyncTask: passare 2 tipi di dato diversi
« Risposta #4 il: 11 Maggio 2011, 17:55:59 CEST »
0
Il logcat non fa' uscire nulla, altrimenti lo avrei postato! Quando capita questo errore eclipse mi apre la prospettiva di debug e l'errore lo identifica cosi:
Thread [<17> AsyncTask #1] (Suspended (exception RuntimeException))   
   ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1086   
   ThreadPoolExecutor$Worker.run() line: 561   
   Thread.run() line: 1096   
Risparmia l'acqua, bevi birra...

Offline MarcoDuff

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 941
  • Respect: +156
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:AsyncTask: passare 2 tipi di dato diversi
« Risposta #5 il: 11 Maggio 2011, 18:04:08 CEST »
0
Il thread è sospeso, premi F8 e guarda il logcat.
Le mie Applicazioni Android | Il mio Blog

Io faccio parte del Gruppo AndDev.it LOGTFO, tu no? Allora GTFO!
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto  alla destra del titolo del post. (Ricky` rulez)

Offline Agosteeno

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
Re:AsyncTask: passare 2 tipi di dato diversi
« Risposta #6 il: 11 Maggio 2011, 20:40:37 CEST »
0
Ok, ora non ho con me il computer con il quale ho quel lavoro, appena posso controllo e posto il risultato
Risparmia l'acqua, bevi birra...

Offline Agosteeno

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
Re:AsyncTask: passare 2 tipi di dato diversi
« Risposta #7 il: 12 Maggio 2011, 08:49:30 CEST »
0
Non conoscevo questa cose del tasto F8, gia' ti ringrazio in maniera infinita per questo! Comunque, questo e' quanto mi dice il logcat dopo aver fatto ripartire il thread


05-12 08:43:15.842: ERROR/AndroidRuntime(217): Uncaught handler: thread AsyncTask #1 exiting due to uncaught exception
05-12 08:43:15.982: ERROR/AndroidRuntime(217): java.lang.RuntimeException: An error occured while executing doInBackground()
05-12 08:43:15.982: ERROR/AndroidRuntime(217):     at android.os.AsyncTask$3.done(AsyncTask.java:200)
05-12 08:43:15.982: ERROR/AndroidRuntime(217):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
05-12 08:43:15.982: ERROR/AndroidRuntime(217):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
05-12 08:43:15.982: ERROR/AndroidRuntime(217):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
05-12 08:43:15.982: ERROR/AndroidRuntime(217):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-12 08:43:15.982: ERROR/AndroidRuntime(217):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
05-12 08:43:15.982: ERROR/AndroidRuntime(217):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
05-12 08:43:15.982: ERROR/AndroidRuntime(217):     at java.lang.Thread.run(Thread.java:1096)
05-12 08:43:15.982: ERROR/AndroidRuntime(217): Caused by: java.lang.ClassCastException: android.app.Application
05-12 08:43:15.982: ERROR/AndroidRuntime(217):     at mioPackage.mioTask.doInBackground(mioTask.java:40)
05-12 08:43:15.982: ERROR/AndroidRuntime(217):     at mioPackage.mioTask.doInBackground(mioTask.java:1)
05-12 08:43:15.982: ERROR/AndroidRuntime(217):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
05-12 08:43:15.982: ERROR/AndroidRuntime(217):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
05-12 08:43:15.982: ERROR/AndroidRuntime(217):     ... 4 more
Risparmia l'acqua, bevi birra...

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1463
  • keep it simple
  • Respect: +259
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Tattoo / Galaxy S
  • Market Developer Name:
    Bradipao
  • Sistema operativo:
    Windows XP
Re:AsyncTask: passare 2 tipi di dato diversi
« Risposta #8 il: 12 Maggio 2011, 08:59:43 CEST »
0
05-12 08:43:15.982: ERROR/AndroidRuntime(217): Caused by: java.lang.ClassCastException: android.app.Application
05-12 08:43:15.982: ERROR/AndroidRuntime(217):     at mioPackage.mioTask.doInBackground(mioTask.java:40)

Cosa hai qua?
Partecipa anche tu all'iniziativa per salvare logCAT, felino in via di estinzione della razza Dalvik : CLICCA QUA

Offline Agosteeno

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
Re:AsyncTask: passare 2 tipi di dato diversi
« Risposta #9 il: 12 Maggio 2011, 09:14:12 CEST »
0
e' la riga che dicevo nella risposta precedente:
Codice (Java): [Seleziona]
...
datiCondivisiApp = (DatiCondivisiApplication) c.getApplicationContext();
...
Risparmia l'acqua, bevi birra...

Offline MarcoDuff

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 941
  • Respect: +156
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:AsyncTask: passare 2 tipi di dato diversi
« Risposta #10 il: 12 Maggio 2011, 10:42:49 CEST »
0
Non conoscevo questa cose del tasto F8

Alt, stop, reset, CRTL + ALT + CANC!  o_O

Per circa 13:58 minuti scordati Android, anzi per non essere distratto disinstallalo!  o_O

Guardati questo video e poi ricominciamo a parlare del tuo problema: Using the Debugger: Lesson 1
Le mie Applicazioni Android | Il mio Blog

Io faccio parte del Gruppo AndDev.it LOGTFO, tu no? Allora GTFO!
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto  alla destra del titolo del post. (Ricky` rulez)

Offline Agosteeno

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
Re:AsyncTask: passare 2 tipi di dato diversi
« Risposta #11 il: 12 Maggio 2011, 11:20:31 CEST »
0
Grazie mille!!! Anche se nn sono molto ferrato con l'inglese questo video era molto chiaro e facile. Ho sempre avuto problemi col debugger di eclipse, perche' non avevo mai trovato uno che me lo spiegasse. Piu' che altro ho cercato lezioni successive e nn me le mostrava...
Risparmia l'acqua, bevi birra...

Offline Agosteeno

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
Re:AsyncTask: passare 2 tipi di dato diversi
« Risposta #12 il: 13 Maggio 2011, 11:19:40 CEST »
0
In ogni caso non e' che sia riuscito a combinarci molto col debug di android... Vabbe' fatto sta' che per quanto riguarda l'errore che ho non sono riuscito a capire quale possa essere il problema...
Risparmia l'acqua, bevi birra...

Offline Agosteeno

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
Re:AsyncTask: passare 2 tipi di dato diversi
« Risposta #13 il: 13 Maggio 2011, 15:48:53 CEST »
0
Visto che ormai eravamo finiti off-topic ho spostato la discussione qua: http://www.anddev.it/index.php/topic,3174.0.html
Risparmia l'acqua, bevi birra...

Offline Agosteeno

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
Re:AsyncTask: passare 2 tipi di dato diversi
« Risposta #14 il: 13 Maggio 2011, 16:40:14 CEST »
0
@Nicola_D che mi avevi risposto nel topic ora chiuso: ho provato a mettere il punto ma non e' cambiato nulla...
Risparmia l'acqua, bevi birra...