2014-01-08 26 views
0

我用同樣的firstNameSharedPreferences這樣的:如何將圖片庫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 MB

可以SharedPreferences能夠保存基地64嗎?或者它的規模很大?

+1

200 MB?它有多大和多高? – Blackbelt

+0

不是一個很好的主意,而是使用sqlight或使用服務器端編程 – Saqib

+0

對不起,它是4 MB。這只是一個錯字。對不起 – 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

不要這樣做。對於SharedPreferences,文件大小爲4MB。 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是否能夠保存可能是4MB大小的圖像的基準64'? – user3110137

+0

請參閱我的答案,我已將其存儲爲字符串格式。雖然它可以達到4 MB,但這不是明智的決定。您可以將此圖像保存在本地數據庫中。 –

+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中

請讓我知道是否有任何疑問在上面的代碼。