为什么 Base64 只对 byte[] ArrayList 中的一个字节数组进行编码?
请参阅下面的代码:
ArrayList<byte[]> stringImgArry = new ArrayList<byte[]>();
bitmap = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] byteArray = stream.toByteArray();
stringImgArry.add(byteArray);
Log.d("LOG_TAG", " byteArray " + byteArray);//[B@73c1473
Log.d("LOG_TAG", " String_byteArray " + stringImgArry);//[[B@73c1473, [B@d50868c]
List<String> encodedImageList = new ArrayList<>();
for (int i = 0; i < stringImgArry.size(); i ++) {
encodedImageList.add(Base64.encodeToString(stringImgArry.get(i), Base64.DEFAULT));
}
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
ImgString = String.join(" NEXT IMAGE ", encodedImageList);
}
Log.d("LOG_TAG", "Array base64 image : " + ImgString);
Log.d("LOG_TAG", "encoded Image List : " + encodedImageList);
Log.d("LOG_TAG", "Array base64 image size : " + encodedImageList.size());//2
然后像这样将 ImgString 保存到 sqlite
mDatabase.execSQL(insertSQL, new String[]{date, description, ImgString});
最佳答案
List<String> encodedImageList = new ArrayList<>();
for (int i = 0; i < stringImgArry.size(); i ++) {
encodedImageList.add(Base64.encodeToString(stringImgArry.get(i), Base64.DEFAULT));
}
现在encodedImageList
包含每个图像的编码字符串。
如果您希望将其作为单个String
,并且所有这些都由换行符分隔,您可以这样做
String string = String.join("\n", encodedImageList);
或者对编码图像列表执行任何您想要的操作。
关于java - Base64字符串仅保存相机拍摄的最后一张图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62449732/