我的数据库中存储了几个包含文件名的字符串数组。我想循环遍历此数组以逐个返回存储在内部存储中的文件。其中一个数组的示例:
[["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();
}
我知道我的代码在逻辑上是完全错误的,但我需要帮助,并且无法理解它。每个数组值都有一个由该数字存储的文件名,我删除了“空”,因为它不需要。我的最终目标是将这些文件(即图像)放入网格视图中。
答案 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();
}