Android 致命异常:Thread-3 java.lang.IndexOutOfBoundsException:索引:0,大小:0
我是Android开发的新手,我有一个给定频率的帧提取应用程序。我总共可以提取80帧,但除此之外,我在调试器和应用程序崩溃中会出现此错误。 我需要提取至少800帧我需要帮助,请这里是我的代码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
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()函数的代码?可能其中有错误。