Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在SharedReferences中保存image base 64?_Android_Sharedpreferences - Fatal编程技术网

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中拥有映像,不是吗?