2011-09-06 9 views
9

Soy nuevo en Android. Quiero almacenar mi mapa de bits en sharedPreferences. ¿Alguien puede decirme cómo será posible? En realidad, mis requisitos son: busco la imagen de la galería y tomo una foto de la cámara y configuro ese mapa de bits en mi ImageView. Todas estas cosas funcionan correctamente. Pero cuando hago clic en el botón Atrás, todo ImageView estará vacío.¿Cómo almacenar y recuperar mapa de bits en sharedPreferences en Android?

Por lo tanto, quiero almacenar ese mapa de bits en mi aplicación.

¿Alguien me puede ayudar? Estoy muy atascado en esto.

Gracias.

+0

Puede pasar por esto. Esto definitivamente le ayudará. [haga clic aquí] [1] [1]: http://stackoverflow.com/questions/17268519/how-to-store-bitmap-object-in-sharedpreferences-in-android –

Respuesta

11

Hola amigos me dieron la solución de mi problema aquí he puesto mi código para que otros puedan utilizar esta solución ..

1). con el botón clic - abrir la cámara para capturar la imagen

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). en el botón cllick - abrir Galería para seleccionar la imagen

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

3). Variables estáticas

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). en onDestroy() Tiene que destruir todo el mapa de bits que configuró.

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

6). En el momento en que obtiene datos de sharedPrefrences, debe convertir cadenas en Bitmap y luego puede establecer bitmap en ImageView. por ejemplo, Bitmap bit1 = BitmapFactory.decodeFile (strimg1); y luego establecer, imageView.setImageBitmap

+0

Gracias por publicar las soluciones para su problema. Establezca su respuesta como seleccionada para eliminarla de la lista no respondida. – blessenm

+0

hey @anddev ¿Puedes publicar tu código completo? –

2

Puede agregar valores en SharedPreference así:

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(); 

sólo puede añadir Boolean, Float, Int, Long, String valores en SharedPreference.

Para almacenar la imagen que debe memoria externa o interna del dispositivo.

+0

Gracias, lo utilizan como dijiste. Pero ahora quiero convertir String to Bitmap para mostrar mi imagen. ¿Puedes tener alguna idea para convertir String a Bitmap? – anddev

+0

intente esto: http: // stackoverflow.com/questions/5405373/converting-string-as-a-bitmap-in-android –

3

No almacene bitmaps en una preferencia compartida. Si necesita persistir durante la vida útil de su aplicación, puede asignarla a un campo static. Si desea conservarlo incluso en los reinicios del dispositivo, colóquelo en un archivo o en la base de datos.

Para obtener más información, lea http://developer.android.com/resources/faq/framework.html#3

Cuestiones relacionadas