String []数组无法正常工作

时间:2017-02-03 06:05:02

标签: android arrays string

我有一个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]);
            }
        }
    }

在上面的代码中[当文件夹为空时]:

  1. 当我设置if (mFiles.length > 0)

    它显示了一个错误

  2. 错误:尝试获取空数组的长度

    1. 当我设置if (mFiles.length >= 0)

      然后它显示与上面的错误相同。

    2. 当我设置if (mFiles == null)

      它也没有工作,因为我在上面的代码中初始化了String []。

      String[] mFiles = new String[0]; 因此它也行不通。

    3. 当我有一些图像时,它工作正常。因为它执行了其他部分。 我该怎么办?每当我的文件夹为空时,它会向我显示Toast.otherwise我的其他代码将被执行。

      任何帮助都将受到高度赞赏。

4 个答案:

答案 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) {
    ...
}