2016-11-09 3 views
0

У меня есть код, который проверяет определенный тип аудиофайла в папке и вызывающем конверторе, чтобы изменить его формат. Теперь, когда первый файл передается, конвертер вызывается и как файл находится в процессе преобразования, для цикла, называемого конвертером снова для второго файла. В этом я чувствовал, что раньше/позже процесс завершается, и, следовательно, я получаю только файл, преобразованный в качестве вывода. Код здесь. Как я могу получить все конвертированные файлы.Для цикла ждать завершения вызванного метода

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

Если и видеть, что есть успех сообщение против преобразования и я никогда не получал это в разделе цикл, тогда как, если я передать только один файл, я получил сообщение об успешном. PLS совета.

+1

Пожалуйста, свяжитесь с автором библиотеки для поддержки нескольких файлов или сделать некоторые семафора (концепция синхронизации основной multithreinding), который не позволил бы «конвертировать()» вызов без завершения предыдущего задания. – 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

Смежные вопросы