Android 从base64内容加载图像时,位图大小超过VM预算

Android 从base64内容加载图像时,位图大小超过VM预算,android,image,bitmap,base64,Android,Image,Bitmap,Base64,我从后端获取Base64格式的图像,对其进行解码并将图像加载到网格视图中。它第一次工作正常,但当我单击“显示更多图像”按钮时,它会显示错误位图大小超过VM预算。当我点击该按钮时,我得到base64格式的图像,我再次设置网格视图的适配器以刷新视图。我阅读了许多与这个问题相关的答案,但它们都是从绘图设备中读取图像,而不是以base64格式接收。我将图像从base64解码为位图的代码如下: public static void getImages(JSONObject jobj){ try{

我从后端获取Base64格式的图像,对其进行解码并将图像加载到网格视图中。它第一次工作正常,但当我单击“显示更多图像”按钮时,它会显示错误位图大小超过VM预算。当我点击该按钮时,我得到base64格式的图像,我再次设置网格视图的适配器以刷新视图。我阅读了许多与这个问题相关的答案,但它们都是从绘图设备中读取图像,而不是以base64格式接收。我将图像从base64解码为位图的代码如下:

public static void getImages(JSONObject jobj){
    try{
        JSONArray jarr = jobj.getJSONArray("images");
        Log.v("array size",""+jarr.length());
        for(int i = 0; i < jarr.length(); i++){
            String encodedContent = jarr.get(i).toString();
            byte[] decodedContent = Base64.decode(encodedContent);
            Bitmap bmp = BitmapFactory.decodeByteArray(decodedContent, 0, decodedContent.length);
            images.add(bmp); //Static array list to save the bitmap images
        }
    }catch(JSONException e){
        e.getMessage();
    }
publicstaticvoidgetimages(jsonobjectjobj){
试一试{
JSONArray jarr=jobj.getJSONArray(“图像”);
Log.v(“数组大小”,“jarr.length());
for(int i=0;i

下次单击“显示更多图像”按钮后,图像将被添加到该图像阵列列表中。有人能帮我建议如何删除此错误吗?

您可以先将base64编码字符串保存到文件中,然后在其他任何地方使用该文件引用


就位图的大小而言,这将更加可靠,并且在将其保存到文件后,也可以轻松地进行缩小,正如Raghunandan在评论中提到的那样。

缩小位图的大小bitmap@Raghunandan谢谢你的建议,但是我怎样才能知道图像的理想尺寸,以便它能在所有的android设备上工作呢es?我问这个问题可能听起来很愚蠢,但我在安卓系统中处理图像的能力相当强。我从后端一次加载近8幅图像。将这些数据写入每个图像的文件,然后再次缩小图像的比例,这会增加显示图像的开销。我希望有更好的解决方案?你应该知道是的,这需要一些时间,但在大多数情况下,一次编写8个文件可能需要一两秒钟。然后,如果您愿意,您可以重新使用这些文件。因此,您建议如果我加载了16个图像,我应该创建16个包含base64格式内容的文件?因为如果我将所有在同一个文件中的内容,然后再次我将不得不为不同的图像解析它。对吗?是的。为不同的图像分离文件