Android - 使用数组动态添加图像到列表

时间:2018-03-20 00:17:56

标签: java android arrays local-storage

我的数据库中存储了几个包含文件名的字符串数组。我想循环遍历此数组以逐个返回存储在内部存储中的文件。其中一个数组的示例:

[["12","21","31"],["empty","22","32"],["13","23","33"]]// this is the array unmodified

下面是我现在的代码,但由于数组从12开始,因为索引在开始时为12,因此只给了我一个索引错误。

layout = layout.replaceAll("\"empty\",?", "").replaceAll("[\"\\]\\ 
 [\"]+","").replaceAll("^\"|\"$", "");  //this removes the "empty" string
    String[] layoutArray = layout.split(",");


    int rows = 3;
    int columns = 3;

    int layoutElement = 0;
    try {
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                // get the image from the internal storage
                int imageIndex = Integer.valueOf(layoutArray[layoutElement]) - 1;
                String imageFile = layoutArray[imageIndex];
                Bitmap image = BitmapFactory.decodeFile(new File(getFilesDir(), imageFile).getAbsoluteFile().toString());
                mImageList.add(new Grid(getApplicationContext(), i, j, image, imageFile));
                layoutElement++;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

我知道我的代码在逻辑上是完全错误的,但我需要帮助,并且无法理解它。每个数组值都有一个由该数字存储的文件名,我删除了“空”,因为它不需要。我的最终目标是将这些文件(即图像)放入网格视图中。

1 个答案:

答案 0 :(得分:1)

  • 您正在使用“,”拆分文本,将数组(您提供的示例)拆分为9个元素...您需要替换所有“],[”使用类似“] - [”并使用“ - ”分割字符串。

    layout = layout.replaceAll("\\] , \\[", "\\] - \\[");  
    String[] layoutArray = layout.split("-");
    
  • 您正在为每个嵌套循环递增layoutElement的值而不在第一个循环中重置它&gt;&gt; 此代码应按预期工作

    layout = layout.replaceAll("\"empty\",?", "").replaceAll("^\"|\"$", "").replaceAll("\\],\\[", "\\]-\\[");
        String[] layoutArray = layout.split("-");
    
    try {
        for (int i = 0; i < layoutArray.length; i++) {
            layoutArray[i]= layoutArray[i].replaceAll("[\\[\"\\]]","");
            String[] splitted = layoutArray[i].split(",");
            for (int j = 0; j < splitted.length; j++) {
                int imageIndex = Integer.valueOf(splitted[j]) - 1;
                String imageFile = splitted[imageIndex];
                Bitmap image = BitmapFactory.decodeFile(new File(getFilesDir(), imageFile).getAbsoluteFile().toString());
                mImageList.add(new Grid(getApplicationContext(), i, j, image, imageFile));
    
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }