Autore Topic: NPE immagine dal database  (Letto 318 volte)

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
NPE immagine dal database
« il: 24 Luglio 2014, 22:06:14 CEST »
0
Ho bisogno di inserire un'immagine nel database e poi visualizzarlo in un ImageView. Sembra che l'immagine selezionata viene inserita nel database, ma quando faccio la query ottengo un NPE. 
Inserisco l'immagine selezionata nel database:
Codice (Java): [Seleziona]
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == SELECT_LOGO && resultCode == RESULT_OK && null != data) {
            Uri selectedImage = data.getData();
            //ottengo il percorso dell'immagine
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();
            //metto il percorso dell'immagine sul bottone
            sel_logo.setText(picturePath);
                    //butto l'immagine nel database
                    Bitmap mBitmap = BitmapFactory.decodeFile(picturePath);
                    ByteArrayOutputStream stream = new ByteArrayOutputStream();
                    mBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
                    byte[] imageInByte = stream.toByteArray();
                    logo.setImageBitmap(BitmapFactory.decodeFile(picturePath));

                     ContentValues cv = new ContentValues();
                     SQLiteDatabase db = mHelper.getWritableDatabase();
                     cv.put(LogoTable.LOGO, imageInByte);
                    //Aggiungo ogni volta una nuova entry
                        boolean inserite = false;
                        if (!inserite){
                            long result = db.insert(LogoTable.TABLE_NAME, null, cv);

                            if (result > 0){
                                inserite = true;
                            }
                        }

                        if (inserite){


                        }
                     db.close();
                }
            }  
query per ricevere l'immagine
Codice (Java): [Seleziona]
private void Query_logo(){
     SQLiteDatabase db = new DatabaseHelper(this).getReadableDatabase();
        String sql = "SELECT _id, logo FROM logoc";
        Cursor c1 = db.rawQuery(sql, null);

        if (c1.moveToFirst()) {
            String id_ = c1.getString(0);              
            byte[] blob = c1.getBlob(c1.getColumnIndex(LogoTable.LOGO));



            Bitmap b1=BitmapFactory.decodeByteArray(blob, 0, blob.length);                  
            logo.setImageBitmap(b1);


            c1.close();
            db.close();

        }
    }
ottengo l'npe a questa riga
Codice (Java): [Seleziona]
logo.setImageBitmap(b1);premetto che l'ImageView (logo)è inizializzata.

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:NPE immagine dal database
« Risposta #1 il: 25 Luglio 2014, 08:01:16 CEST »
0
Prima di fare setImageBitmap(b1) controlla sempre che l'argomento (b1) non sia NULL.
Se è NULL devi risalire alla causa.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Re:NPE immagine dal database
« Risposta #2 il: 25 Luglio 2014, 15:26:52 CEST »
0
Ho inserito un Log.d per vedere se "b1" è NULL, non lo è, ricevo questo dal LOG
Codice (Java): [Seleziona]
b1: android.graphics.Bitmap@42c58d80. A questo punto ti chiedo se bisogna fare qualche conversione prima di impostare b1 nell'ImageView?

Post unito: 25 Luglio 2014, 15:44:34 CEST
Molto strano l'ImageView "logo" è NULL. Ho dovuto inizializzare logo anche nel metodo, altrimenti è NULL. Nell'OnCreate() la vede, nel metodo dove c'è la query no. Boh! comunque ora và!
« Ultima modifica: 25 Luglio 2014, 15:44:34 CEST da JCC, Reason: Merged DoublePost »