2014-01-08 3 views
0

나는이 같은 SharedPreferences에 동일한 firstName에 사용 : 그것은 좋은 일sharedpreferences에 이미지베이스 64을 저장하는 방법은 무엇입니까?

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을 저장하려고합니다. 4MB

SharedPreferences은 기본 64를 저장할 수 있습니까? 또는 그 크기가 큰가?

+1

200MB? 얼마나 크고 높습니까? – Blackbelt

+0

그다지 좋지는 않지만 sqlight를 사용하거나 서버 측 프로그래밍을 사용하십시오 – Saqib

+0

죄송합니다. 4MB입니다. 그것은 단지 오타였습니다. 죄송합니다 – 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

이고이 함수의 매개 변수는 바이트 배열로 변경했을 때 my base 64입니다. – user3110137

+0

이미 문제가 있다면 어떻게해야합니까? 부품의 나머지 부분을 사용하십시오 ... – Saqib

+0

. 프로필 이미지는'ImageName.jpg' 이미지에 저장됩니까? 또한, 나는 그것이 '그때 문제가 뭐에요?'라고 말하면서 당신을 얻지 못했습니다. 죄송합니다. 영어로 나쁘다. – user3110137

2

하지 마십시오. 파일 크기가 4MB 인 경우 SharedPreferences의 크기가 커집니다. SharedPreferences는 키 - 값 쌍에 프라이빗 프리미티브 데이터를 저장하도록 설계되었으며 파일에 대해서는 그렇지 않습니다. 큰 파일을 저장하려면 내부/외부 저장소를 사용하고 DB에 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

내 친구, 저에게 대답 해 주셔서 감사합니다. 나는 이미지를 저장하는 방법에 대해 묻지 않는다.나는'4MB 크기 일 수있는 이미지의 기본 64을 저장할 수있는 공유 된 참조 '에 대해 묻고있다. – user3110137

+0

내 대답을 참조하십시오, 여기서 문자열 형식으로 저장합니다. 4MB이지만 할 수는 있지만 현명한 결정은 아닙니다. 이 이미지를 로컬 데이터베이스에 저장할 수 있습니다. –

+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에 쉽게 저장할 수 있습니다.

위 코드에 의심의 여지가 있으면 알려주십시오.

관련 문제