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

Android 致命异常:Thread-3 java.lang.IndexOutOfBoundsException:索引:0,大小:0,android,Android,我是Android开发的新手,我有一个给定频率的帧提取应用程序。我总共可以提取80帧,但除此之外,我在调试器和应用程序崩溃中会出现此错误。 我需要提取至少800帧我需要帮助,请这里是我的代码 public void extractionFrame(final File file) throws IOException, JCodecException { ArrayList<Bitmap> bArray = new ArrayList<>(); f

我是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();
     }
public void extractionFrame(最终文件)抛出IOException、JCodeceException{
ArrayList bArray=新的ArrayList();
最终ArrayList rouge=新ArrayList();
最终ArrayList vert=新ArrayList();
最终ArrayList bleu=新ArrayList();
最终ArrayList tabColor=新ArrayList();
如果(文件!=null){
if(file.exists()){
最终字符串路径=file.getAbsolutePath();
最终帧=200;
if(android.os.Build.VERSION.SDK\u INT>=android.os.Build.VERSION\u code.M){
final ProgressDialog ProgressDialog=新建ProgressDialog(getContext());
progressDialog.setMessage(“收费”);
progressDialog.setCancelable(假);
progressDialog.setTitle(“请稍候”);
progressDialog.show();
线程线程=新线程(){
@凌驾
公开募捐{
ArrayList rgb=新的ArrayList();
int-looper=340000;
对于(int i=0;i=Build.VERSION\u code.M){
存储列表(tabColor,getContext());
}
progressDialog.disclose();
}
};
thread.start();
}

您正在尝试访问以下内容:

rouge.add((Integer) rgb.get(0));
vert.add((Integer) rgb.get(1));
bleu.add((Integer) rgb.get(2));
当rgb阵列为空时

明明

rgb = extractRGB(b);
不工作。您应该检查它是否返回任何内容。例如:

if (!rgb.isEmpty()) {
    rouge.add((Integer) rgb.get(0));
    vert.add((Integer) rgb.get(1));
    bleu.add((Integer) rgb.get(2));
} else {
    Log.e("tag", "ERROR: RGB array is empty");
}
或者类似的

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


让我知道这是否有用。

非常感谢Luis Henriques的帮助indexOutOfBoundsException导致的问题已解决,但它始终返回“错误:RGB数组为空”当帧数超过80时,我不知道为什么。视频足够长,甚至有1000帧。很抱歉,我无法帮助您。我们需要更多信息。为什么不提出一个新问题,说明您正在使用哪个库并公开extractRGB()函数的代码?可能其中有错误。