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

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
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 normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
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 normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
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 storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    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

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
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 storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    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.

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
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 normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
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: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
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?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
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 storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    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

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
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 normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
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 normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
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 normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
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...