致命异常:Thread-3 java.lang.IndexOutOfBoundsException:索引:0,大小:0

时间:2018-05-18 10:16:02

标签: android

我是Android开发的新手,我在给定的频率上有一个帧提取应用程序。我总共可以提取80帧但超出此范围我在调试器和应用程序崩溃中出现此错误。 我需要提取至少800帧,我需要帮助,请在这里是我的代码

   public void extractionFrame(final File file) throws IOException, JCodecException {
    ArrayList<Bitmap> bArray = new ArrayList<>();

    final ArrayList<Integer> rouge = new ArrayList<>();
    final ArrayList<Integer> vert = new ArrayList<>();
    final ArrayList<Integer> bleu = new ArrayList<>();
    final ArrayList<ArrayList<Integer>> tabColor = new ArrayList<>();

    if (file != null) {
        if (file.exists()) {

            final String path = file.getAbsolutePath();
            final int nbrFrame = 200;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
                final ProgressDialog progressDialog = new ProgressDialog(getContext());
                progressDialog.setMessage("chargement");
                progressDialog.setCancelable(false);
                progressDialog.setTitle("please wait");
                progressDialog.show();
                Thread thread = new Thread() {
                    @Override
                    public void run() {

                        ArrayList rgb = new ArrayList();
                        int looper = 340000;
                        for (int i = 0; i < nbrFrame; i++) {

                            FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
                            mmr.setDataSource(path);
                            Bitmap b = mmr.getFrameAtTime(looper, FFmpegMediaMetadataRetriever.OPTION_CLOSEST); 
                            rgb = extractRGB(b);
                            rouge.add((Integer) rgb.get(0));
                            vert.add((Integer) rgb.get(1));
                            bleu.add((Integer) rgb.get(2));

                            tabColor.add(rouge);
                            tabColor.add(vert);
                            tabColor.add(bleu);
                            rgb.clear();

                            mmr.release();
                            System.out.println("je suis le nombre de bitmap   " + b + i);
                            looper += 34000;
                        }
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                            saveList(tabColor, getContext());
                        }
                        progressDialog.dismiss();

                    }
                };
                thread.start();
     }

1 个答案:

答案 0 :(得分:0)

您正尝试访问这些内容:

#undef __clang__

虽然你的rgb数组是空的。

显然

rouge.add((Integer) rgb.get(0));
vert.add((Integer) rgb.get(1));
bleu.add((Integer) rgb.get(2));

无效。您应该检查它是否返回任何内容。像这样:

rgb = extractRGB(b);

或类似的东西。

此外,如果您发布堆栈跟踪,则更容易帮助您。

如果这有帮助,请告诉我。