Come memorizzare e recuperare la bitmap in sharedPreferences in Android?

Sono nuovo in Android. Voglio conservare il mio bitmap in sharedPreferences. Qualcuno può dirmi come sarà possibile? In realtà le mie esigenze è possibile recuperare le foto da galleria, così come scattare foto dalla fotocamera e ho impostato che la Bitmap nel mio ImageView. Tutte queste cose funzionano correttamente. Ma quando clicco sul pulsante indietro tutti ImageView sarà vuota.

Quindi voglio archivio di immagini Bitmap in tutta la mia applicazione.

Qualcuno mi può aiutare? Io sono molto attaccato a questo.

Grazie.

InformationsquelleAutor anddev | 2011-09-06



3 Replies
  1. 11

    Ciao amici ho avuto la soluzione del mio problema qui ho posto il mio codice in modo che altri utenti possono utilizzare questa soluzione..

    1). fare clic sul pulsante – apre la fotocamera, per captureing immagine

    ContentValues values = new ContentValues();  
    values.put(MediaStore.Images.Media.TITLE, fileName);  
    mCapturedImageURI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);  
    
    Intent cameraIntent = new Intent("android.media.action.IMAGE_CAPTURE");
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);  
    startActivityForResult(cameraIntent, CAMERA_REQUEST);

    2). sul pulsante cllick – aprire la Galleria per selezionare l’immagine

    Intent galleryintent = new Intent(Intent.ACTION_GET_CONTENT);
    galleryintent.setType("image/*");
    startActivityForResult(galleryintent, IMAGE_PICK);

    3). Variabili statiche

    private static final int CAMERA_REQUEST = 0; 
        private static final int IMAGE_PICK = 1;

    4). onActivityResult

        protected void onActivityResult(int requestCode, int resultCode, Intent data) 
            {
                switch(requestCode) 
                { 
                    case CAMERA_REQUEST:
                        if(resultCode == RESULT_OK)
                        {
                            String[] projection = { MediaStore.Images.Media.DATA}; 
                            Cursor cursor = managedQuery(mCapturedImageURI, projection, null, null, null); 
                            int column_index_data = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
                            cursor.moveToFirst(); 
                            String capturedImageFilePath = cursor.getString(column_index_data);
                            Log.d("photos*******"," in camera take int  "+capturedImageFilePath);
    
                            Bitmap photo_camera = BitmapFactory.decodeFile(capturedImageFilePath, options);
    
                            if(data != null)
                            {
        img_1.setImageBitmap(photo_camera);
                                    prefsEditor.putString(Global.PHOTO_1,capturedImageFilePath);
        }
        }
    case IMAGE_PICK:
                    if(resultCode == RESULT_OK)
                    {  
                        Uri selectedImage = data.getData();
                        String[] filePathColumn = {MediaStore.Images.Media.DATA};
    
                        Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
                        cursor.moveToFirst();
    
                        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                        String filePath = cursor.getString(columnIndex);
                        cursor.close();
    
    //                 Bitmap photo = BitmapFactory.decodeFile(filePath);
                       Bitmap photo_gallery = BitmapFactory.decodeFile(filePath,options);
                       img_1.setImageBitmap(photo_gallery);
                            prefsEditor.putString(Global.PHOTO_1, filePath);
    }
    
    }
            prefsEditor.commit();
    }

    5). in onDestroy()
    Devi distruggere tutte le bitmap che si insediarono.

    @Override
        public void onDestroy()
        {
            super.onDestroy();
            if(photo_camera != null)
            {
                photo_camera.recycle();
            }
            if(photo_gallery != null)
            {
                photo_gallery.recycle();
            }
    }

    6). Al momento in cui si recupera dati da sharedPrefrences devi convertire la stringa in Bitmap e quindi è possibile impostare bitmap in ImageView.
    per esempio, Bitmap bit1 = BitmapFactory.decodeFile(strimg1);
    e quindi impostare , imageView.setImageBitmap

    • Grazie per l’invio dell’soluzioni per il vostro problema. Impostare la tua risposta selezionata per rimuovere dall’elenco senza risposta.
    • ehi @anddev Puoi pubblicare il tuo modulo di codice??
  2. 2

    È possibile aggiungere valori in SharedPreference come questo:

    SharedPreferences pref = getSharedPreferences("abc", 0);
    Editor edit = pref.edit();
    edit.putBoolean(arg0, arg1);
    edit.putFloat(arg0, arg1);
    edit.putInt(arg0, arg1);
    edit.putLong(arg0, arg1);
    edit.putString(arg0, arg1);
    edit.commit();

    È possibile aggiungere solo Boolean, Float, Int, Long, String valori in SharedPreference.

    Per memorizzare l’immagine si dovrebbe esterno o memoria interna del dispositivo.

    • Grazie, ho usato il secondo che hai detto. Ma ora voglio Convertire la Stringa a Bitmap da visualizzare la mia immagine. Si può avere qualche idea per la conversione di Stringa Bitmap?
    • prova questo: stackoverflow.com/questions/5405373/…

Lascia un commento