Android 如何在SharedReferences中保存image base 64?
我曾经在Android 如何在SharedReferences中保存image base 64?,android,sharedpreferences,Android,Sharedpreferences,我曾经在SharedReferences中使用相同的firstName,如下所示: private String filename = "mySharedString"; private SharedPreferences someData; someData = getSharedPreferences(filename, 0); Editor editor = someData.edit(); editor.putString("firstName", phoneNumber); someD
SharedReferences
中使用相同的firstName
,如下所示:
private String filename = "mySharedString";
private SharedPreferences someData;
someData = getSharedPreferences(filename, 0);
Editor editor = someData.edit();
editor.putString("firstName", phoneNumber);
someData.getString("firstName", "NULL");
它工作得很好。现在我想保存一个可能为4MB的图像的base64
SharedReferences
能否保存base 64?或者这个尺寸太大了?不要这样做。4MB的文件大小对于SharedReferences
来说太大了。SharedReference被设计成以键值对的形式存储私有原始数据,当然不是用于文件。要存储大文件,请使用内部/外部存储,并在数据库中保留Uri
。虽然这不是个好主意,但您可以用这种方式来实现
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()
我想这样你就可以将图像保存在SharedReferences中。尝试将其保存在内存中
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());
}
}
考虑到您的映像位于路径-->“/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字符串格式的字符串,我们可以轻松地将其存储到SharedReferences中
如果对上述代码有任何疑问,请告诉我。200 MB?它有多大和多高?这样做不是一个好主意,而是使用SQLlight或使用服务器端编程抱歉,它是4MB。那只是个打字错误。sorry@Saqib我有一个服务器,我使用web服务获取图像。我这样问是因为我不想在用户每次打开应用程序时都获取图像。这是他的个人资料图像。我想把它存到本地电话里。另外,我应该使用sqllight来保存图像吗?实际上我的应用程序很简单。我只需要保存名字和图片。我的应用程序中没有其他数据。知道了,您已经得到了您告诉我的答案。所以伙计,向前走。。。。。如果你需要任何进一步的帮助,请问我。我的朋友,谢谢你回答我。我不是问如何保存图像。我问的是关于
SharedReference是否能够保存4MB大小的图像的基64
?请参阅我的答案,我在哪里以字符串格式存储了它。虽然它是4MB,但这不是明智的决定。您可以将此图像保存在本地数据库中。+1。谢谢你的帮助。我发现一个问题,巫婆是张贴在评论与上述答案,是有益的。非常感谢你的帮助和支持。我希望有一天我能帮助你。我想这个问题对我有帮助。谢谢你看到这个链接:这个函数的参数是我的base 64,当我把它改成bytes数组时?只是为了澄清一下。配置文件图像将保存在ImageName.jpg
image中,对吗?另外,我没有通过说来理解你,如果它已经存在,那么问题是什么?只需使用该部分的其余部分。
对不起,我的英语不好。应将文件图像与名为imageName.jpg的图像一起保存在设备内存中,而不是首选项中。如果您的映像已经在Base64中,您只需使用该部分来保存文件,因为上面的答案会获取一个字节[]数据并将其转换为Base64,而您已经在Base64中拥有映像,不是吗?