for循环等待被调用方法的完成

时间:2016-11-09 16:37:01

标签: java android file audio-converter

我有一个代码,它检查文件夹中的已定义类型的音频文件,并调用转换器来更改其格式。现在,当第一个文件通过时,转换器被调用并且正在文件正在进行转换,对于第二个文件,再次被称为转换器的循环。在此我觉得早期/晚期过程终止,因此我只将文件转换为输出。代码就在这里。我怎样才能设法让所有文件都被包含在内。

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();
            }
        }

如果你看到有反对转换的成功消息,我从来没有得到这个for循环,而如果我只传递一个文件,我得到了成功的消息。请咨询。

1 个答案:

答案 0 :(得分: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();
        }
   }
}