Autore Topic: Problema classCastexception tra Object e Bitmap.  (Letto 473 volte)

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Problema classCastexception tra Object e Bitmap.
« il: 05 Aprile 2011, 19:53:40 CEST »
0
Ciao, ho un problema con questo codice. Spero non sia troppo complicato da leggere.  ;-)

Codice (Java): [Seleziona]
        public class addPicture extends AsyncTask<Object, Void, String> {

                @Override
                protected String doInBackground(Object... params) {
                        String path = null;

                        // Controlla se il paramentro passato è un'immagine
                        if (params[0].getClass().isInstance(Bitmap.class)) {
                       
                                        // Se sì, passo l'immagine al metodo savePicture che la salva e ritorna la
                                        // directory in cui è stata salvata.

                                        path = savePicture((Bitmap) params[0], null);
                               
                        } else {

                                // Sennò il paramentro passato è una stringa (= directory dell'immagine da
                                // salvare)
                               

                                        // Passo la directory dell'immagine da salvare al metodo savePicture che la copia e ritorna la
                                        // directory in cui è stata copiata.

                                        path = savePicture(null, (String) params[0]);
                               
                        }
                       
                        //Ritorno la directory dell'immagine salvata che verrà passato come result al metodo sottostante.
                        return path;
                }

                @Override
                protected void onPostExecute(String result) {
                        super.onPostExecute(result);

                        //Aggiorno l'array con la stringa "path" ottenuta dal metodo precedente.

                        updateArray(result);
                }
        }


04-05 19:26:56.000: ERROR/AndroidRuntime(9289): FATAL EXCEPTION: AsyncTask #1
04-05 19:26:56.000: ERROR/AndroidRuntime(9289): java.lang.RuntimeException: An error occured while executing doInBackground()
04-05 19:26:56.000: ERROR/AndroidRuntime(9289):     at android.os.AsyncTask$3.done(AsyncTask.java:200)
04-05 19:26:56.000: ERROR/AndroidRuntime(9289):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
04-05 19:26:56.000: ERROR/AndroidRuntime(9289):     at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
04-05 19:26:56.000: ERROR/AndroidRuntime(9289):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
04-05 19:26:56.000: ERROR/AndroidRuntime(9289):     at java.util.concurrent.FutureTask.run(FutureTask.java:138)
04-05 19:26:56.000: ERROR/AndroidRuntime(9289):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
04-05 19:26:56.000: ERROR/AndroidRuntime(9289):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
04-05 19:26:56.000: ERROR/AndroidRuntime(9289):     at java.lang.Thread.run(Thread.java:1019)
04-05 19:26:56.000: ERROR/AndroidRuntime(9289): Caused by: java.lang.ClassCastException: android.graphics.Bitmap
04-05 19:26:56.000: ERROR/AndroidRuntime(9289):     at com.remi.reminotes.ui.PicturePaths$addPicture.doInBackground(PicturePaths.java:85)
04-05 19:26:56.000: ERROR/AndroidRuntime(9289):     at com.remi.reminotes.ui.PicturePaths$addPicture.doInBackground(PicturePaths.java:1)
04-05 19:26:56.000: ERROR/AndroidRuntime(9289):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
04-05 19:26:56.000: ERROR/AndroidRuntime(9289):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
04-05 19:26:56.000: ERROR/AndroidRuntime(9289):     ... 4 more


Dal logcat si evince che il problema sia questo: path = savePicture((Bitmap) params[0], null); perché cerco di fare un cast a Bitmap dell'oggetto params[0].  Prima di fare il cast, la condizione controlla proprio che il parametro sia un'istanza della classe Bitmap, e la classe Bitmap, ovviamente, è sottoclasse della classe oggetto, quindi non capisco proprio dove sia il problema!   :D
Qualcuno ha qualche idea?

EDIT: ho risolto. Il problema era nella condizione "if (params[0].getClass().isInstance(Bitmap.class))" sempre falsa, quindi cercava di fare il cast (String) ad un oggetto di tipo Bitmap. Ho risolto passando due parametri all'asynctask di cui uno nullo, allo stesso modo in cui passo i parametri al metodo savePicture().
A questo punto, c'è qualcuno che sappia perché il metodo getClass() dica che params[0] è un Object e non vada più a fondo dicendomi che sottoclasse di Object sia?

« Ultima modifica: 05 Aprile 2011, 20:49:43 CEST da Verandi »

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:Problema classCastexception tra Object e Bitmap.
« Risposta #1 il: 05 Aprile 2011, 22:57:41 CEST »
0
Per capire se un oggetto è o meno stanza di una classe devi usare l'operatore instanceof.
Il metodo getClass ti restituisce sempre la classe dell'oggetto, ed in effetti params l'hai definito tu come Object.