我有一个String []数组的问题。我从Here引用这个问题 &安培; Here
但是,我还没有从链接中找到任何解决方案。
我想要的是什么:
我正在开发一个自定义相机应用程序。我有一个文件夹,我在其中保存捕获的图像。此外,我有1个ImageView。当我的应用程序启动时,文件夹的图像[或位图]被设置为该ImageView(始终将文件夹的第一个图像设置为ImageView)。
以下是我的代码。
private void loadImageInImageView() {
Uri[] mUrls;
String[] mFiles = new String[0];
File file = new File(android.os.Environment.getExternalStorageDirectory(), "CameraApp/Images");
File[] imageList = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File file, String name) {
return ((name.endsWith(".jpg")) || (name.endsWith(".png")) || (name.endsWith(".mp4")));
}
});
if (mFiles.length >= 0) {
Toast.makeText(this, "No Captured Images", Toast.LENGTH_SHORT).show();
} else {
mFiles = new String[imageList.length];
for (int i = 0; i < imageList.length; i++) {
mFiles[i] = imageList[i].getAbsolutePath();
}
mUrls = new Uri[mFiles.length];
for (int i = 0; i < mFiles.length; i++) {
mUrls[i] = Uri.parse(mFiles[i]);
imgBtnThumbnail.setImageURI(mUrls[i]);
}
}
}
在上面的代码中[当文件夹为空时]:
当我设置if (mFiles.length > 0)
它显示了一个错误
错误:尝试获取空数组的长度
当我设置if (mFiles.length >= 0)
然后它显示与上面的错误相同。
当我设置if (mFiles == null)
它也没有工作,因为我在上面的代码中初始化了String []。
String[] mFiles = new String[0];
因此它也行不通。
当我有一些图像时,它工作正常。因为它执行了其他部分。 我该怎么办?每当我的文件夹为空时,它会向我显示Toast.otherwise我的其他代码将被执行。
任何帮助都将受到高度赞赏。
答案 0 :(得分:2)
File[] imageList = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File file, String name) {
return ((name.endsWith(".jpg")) || (name.endsWith(".png")) || (name.endsWith(".mp4")));
}
});
if (imageList.length = 0) {
Toast.makeText(this, "No Captured Images", Toast.LENGTH_SHORT).show();
} else {
String[] mFiles = new String[imageList.length];
for (int i = 0; i < imageList.length; i++) {
mFiles[i] = imageList[i].getAbsolutePath();
}
mUrls = new Uri[mFiles.length];
for (int i = 0; i < mFiles.length; i++) {
mUrls[i] = Uri.parse(mFiles[i]);
imgBtnThumbnail.setImageURI(mUrls[i]);
}
}
答案 1 :(得分:1)
如果您想要的功能在 imageList 的大小大于零时有效,请尝试以下代码。
private void loadImageInImageView() {
File file = new File(android.os.Environment.getExternalStorageDirectory(), "CameraApp/Images");
File[] imageList = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File file, String name) {
return ((name.endsWith(".jpg")) || (name.endsWith(".png")) || (name.endsWith(".mp4")));
}
});
// conditional operator [ ? : ]
// value = (experssion) ? value if true : value if false
// ref : https://www.tutorialspoint.com/java/java_basic_operators.htm
int imgLength = imageList == null ? 0 : imageList.length;
if(imgLength > 0)
{
String[] mFiles = new String[imgLength];
Uri[] mUrls = new Uri[imgLength];
//merge for condition
for (int i = 0; i < imgLength; i++) {
mFiles[i] = imageList[i].getAbsolutePath();
mUrls[i] = Uri.parse(mFiles[i]);
imgBtnThumbnail.setImageURI(mUrls[i]);
}
}
else
{
Toast.makeText(this, "No Captured Images", Toast.LENGTH_SHORT).show();
}
}
答案 2 :(得分:0)
private void loadImageInImageView() {
Uri[] mUrls;
File[] imageList
File file = new File(android.os.Environment.getExternalStorageDirectory(), "CameraApp/Images");
imageList = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File file, String name) {
return ((name.endsWith(".jpg")) || (name.endsWith(".png")) || (name.endsWith(".mp4")));
}
});
if (imagelist==null && imageList.length == 0) {
Toast.makeText(this, "No Captured Images", Toast.LENGTH_SHORT).show();
} else {
for (int i = 0; i < imageList.length; i++) {
imgBtnThumbnail.setImageURI(Uri.parse(imageList[i].getAbsolutePath()););
}
}
}
试试这个; 但由于for循环,你的图像会不断变化;
答案 3 :(得分:0)
不要初始化mFiles。在添加一些数据时将其初始化。 并且为了检查它是否为空,请使用:
if (mFiles != null && mFiles.length > 0) {
...
}