2014-01-08 3 views
0

Раньше я же в firstName в SharedPreferences как это:Как сохранить базу изображений 64 в sharedpreferences?

private String filename = "mySharedString"; 
private SharedPreferences someData; 
someData = getSharedPreferences(filename, 0); 
Editor editor = someData.edit(); 
editor.putString("firstName", phoneNumber); 
someData.getString("firstName", "NULL"); 

Он работает хорошо. Теперь я хочу сохранить base 64 изображения, которое может быть 4 МБ

Может SharedPreferences сможет сохранить базу 64? или этот размер для него большой?

+1

200 МБ? насколько велика и высока? – Blackbelt

+0

Не очень хорошая идея для этого, скорее используйте sqlight или используйте программирование на стороне сервера – Saqib

+0

Извините, что это 4 МБ. это была просто опечатка. извините – user3110137

ответ

2

Попробуйте сохранить в памяти

public void savedImage(byte[] data) { 
    InputStream in = new ByteArrayInputStream(data); 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    Bitmap preview_bitmap = BitmapFactory.decodeStream(in, null, options); 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    preview_bitmap.compress(Bitmap.CompressFormat.JPEG, 70, stream); 
    byte[] byteArray = stream.toByteArray(); 
    final String newData = Base64.encodeToString(byteArray, 0); 
    FileOutputStream outStream = null; 
    try { 
     outStream = new FileOutputStream(new File(
       Environment.getExternalStorageDirectory(), "ImageName.jpg")); 
     outStream.write(byteArray); 
     outStream.close(); 
    } catch (FileNotFoundException e) { 
     Log.d("No File", e.getMessage()); 
    } catch (IOException e) { 
     Log.d("IO Error", e.getMessage()); 
    } 
} 
+0

, а параметр этой функции - это моя база 64, когда я изменил ее на массив байтов? – user3110137

+0

если это уже тогда, в чем проблема? просто используйте остальную часть детали ... – Saqib

+0

просто чтобы быть понятным. изображение профиля будет сохранено в изображении «ImageName.jpg» правильно? Кроме того, я не понял вас, говоря: «Если это уже тогда, в чем проблема? просто используйте остальную часть части. «Извините, я плохой на английском – user3110137

2

Не делайте этого. Размер файла 4 МБ является большим для SharedPreferences. SharedPreferences были предназначены для хранения частных примитивных данных в парах ключ-значение и, конечно же, не для файлов. Для хранения больших файлов используйте внутреннее/внешнее хранилище и держите Uri на нем в БД.

+0

любезно ли вы мне приведете пример кода? – user3110137

+0

Я думаю, этот вопрос мне поможет. спасибо http://stackoverflow.com/questions/7887078/android-saving-file-to-external-storage – user3110137

+0

См. эту ссылку: http://afterthoughtsoftware.com/posts/Storing-image-URIs-using-Android- SQLite – Kristopher

1

Хотя это плохая идея, но вы можете сделать это таким образом

Bitmap photo=BitmapFactory.decodeResource(getResources(), R.drawable.addphoto); 

    ByteArrayOutputStream bao = new ByteArrayOutputStream(); 
       photo.compress(Bitmap.CompressFormat.JPEG, 100, bao); 
       byte [] ba = bao.toByteArray(); 
       String ba1=Base64.encodeBytes(ba); 

and store this string ba1 to your `SharedPreferences` 

private String filename = "mySharedString"; 
private SharedPreferences someData; 
someData = getSharedPreferences(filename, 0); 
Editor editor = someData.edit(); 
editor.putString("firstName", phoneNumber); 
editor.putString("ImageData", ba1); 
editor.commit() 

Я думаю, что в этом случае вы будете сохранить изображение в sharedpreferences.

+0

мой друг, спасибо, что ответили. Я не спрашиваю о том, как «как» сохранить изображение.Я спрашиваю о 'sharedPreference, способном сохранить базу 64 изображения, которое может быть размером 4 МБ? – user3110137

+0

см. Мой ответ, где я храню это в строковом формате. Хотя это 4 МБ, вы можете, но это не мудрое решение. вы можете сохранить это изображение в локальной базе данных. –

+0

+1 для вас. спасибо за помощь. я нашел вопрос, ведьма размещена в комментариях с вышеуказанным ответом, полезна. большое спасибо. – user3110137

3

Учитывая ваше изображение на пути -> "/sdcard/test.jpg", см код ниже

/*Get image into file*/ 
File image_file = new File("/sdcard/test.jpg"); 
/*Get absolute path in bitmap*/ 
Bitmap mBitmap = BitmapFactory.decodeFile(image_file.getAbsolutePath()); 
/*Instantiate Byte Array Output Stream to compress the bitmap*/ 
ByteArrayOutputStream bao_stream = new ByteArrayOutputStream(); 
/*Compress bitmap*/ 
mBitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); 
/*Get byteArray from stream*/ 
byte[] arr_byte_image = bao_stream.toByteArray(); 
/*Base6e class has a method name encodeToString using which you can get string from byteArray*/ 
String img_base64_str = Base64.encodeToString(arr_byte_image, 0);` 

Теперь, когда мы имеем строка, содержащая целое изображение в формате base64, мы можем легко сохранить его в SharedPreferences

Пожалуйста, дайте мне знать, если есть какие-либо сомнения в приведенном выше коде.

Смежные вопросы