2016-11-09 102 views
0

我有一个代码,它正在检查文件夹中定义的类型的音频文件并调用转换器来更改其格式。现在当第一个文件通过时,转换器被调用,并且当文件正在转换过程中,for循环再次调用转换器作为第二个文件。在这个我感觉早/晚过程终止,因此我只获得文件转换为输出。代码在这里。我如何设法让所有文件传输。For循环等待完成调用的方法

public void convertAudio(View v) { 


     final File pathanme = new File(Environment.getExternalStorageDirectory() + "/sdcard/test"); 
     File files[] = pathanme.listFiles(); 
     for (File f : files) { 
      if (f.getName().endsWith(".mp4")) { 
       String filename = f.getName().toLowerCase().toString(); 
       System.out.println(filename); 

       File wavFile = new File(pathanme, filename); 
       IConvertCallback callback = new IConvertCallback() { 
        @Override 
        public void onSuccess(File convertedFile) { 
         Toast.makeText(NewMainActivity.this, "SUCCESS: " + convertedFile.getPath(), Toast.LENGTH_LONG).show(); 
        } 

        @Override 
        public void onFailure(Exception error) { 
         Toast.makeText(NewMainActivity.this, "ERROR: " + error.getMessage(), Toast.LENGTH_LONG).show(); 
        } 
       }; 
       Toast.makeText(this, "Converting audio file..." + filename, Toast.LENGTH_SHORT).show(); 

       AndroidAudioConverter.with(this) 
         .setFile(wavFile) 
         .setFormat(AudioFormat.MP3) 
         .setCallback(callback) 
         .convert(); 
      } 
     } 

如果你发现有抗转换成功的消息,我从来没有这种下循环,而如果我通过只有一个文件,我得到了成功的消息。请咨询。

+1

请联络库的作者,以支持多个文件或做一些信号量(基本multithreinding同步概念)如果没有完成之前的工作,将不允许'convert()'调用 – Selvin

+0

人们非常渴望降级初学者的问题而不是支持。我现在不敢问这里。 –

+0

人们都懒得问以前做一些研究...... – Selvin

回答

0

您可以为索引添加一个类实例变量并根据需要递增,根据需要递归调用convert()方法。它会是这个样子(Java是一个有点生疏,你可能要清理语法):

public class MyClass { 

    private int fileIndex = 0; 
    private File[] files; 

    public void convertAudio(View v) { 
    final File pathanme = new File(Environment.getExternalStorageDirectory() + "/sdcard/test"); 
    this.files = pathanme.listFiles(); 
    fileIndex = 0; 
    convertFile(files[fileIndex]); 

    } 

    private void convertFile(File f) { 
     if (f.getName().endsWith(".mp4")) { 
     String filename = f.getName().toLowerCase().toString(); 
     System.out.println(filename); 

     File wavFile = new File(pathanme, filename); 
     IConvertCallback callback = new IConvertCallback() { 
      @Override 
      public void onSuccess(File convertedFile) { 
       Toast.makeText(NewMainActivity.this, "SUCCESS: " + convertedFile.getPath(), Toast.LENGTH_LONG).show(); 
       fileIndex++; 
       if (this.files.size > fileIndex) { 
        convertFile(this.files[fileIndex]; 
       } else { 
        // we're done converting 
       } 
      } 

      @Override 
      public void onFailure(Exception error) { 
       Toast.makeText(NewMainActivity.this, "ERROR: " + error.getMessage(), Toast.LENGTH_LONG).show(); 
       // cancel out or keep going, whatever 
      } 
     }; 

      Toast.makeText(this, "Converting audio file..." + filename, Toast.LENGTH_SHORT).show(); 

      AndroidAudioConverter.with(this) 
        .setFile(wavFile) 
        .setFormat(AudioFormat.MP3) 
        .setCallback(callback) 
        .convert(); 
     } 
    } 
} 
+0

逻辑上它工作正常,只剩下问题是因为转换器占用太多的内存,所以系统开始挂起线程。 –

+0

很高兴知道。如果您遇到内存问题,请使用更新的信息和代码创建一个单独的问题。祝你好运! – kpsharp