2016-11-09 4 views
0

Ich habe einen Code, der eine definierte Art von Audiodatei in Ordner überprüft und Konverter aufrufen, um das Format zu ändern. Jetzt, wenn die erste Datei übergeben wird, wird der Converter aufgerufen, und während die Datei gerade konvertiert wird, wird der Converter erneut für die zweite Datei aufgerufen. In diesem fühlte ich früher/später Prozess wird beendet und daher ich bekomme nur Datei als Ausgabe konvertiert. Der Code ist hier. Wie kann ich alle Dateien konvertieren?For-Schleife warten auf den Abschluss der aufgerufenen Methode

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

Wenn u sehen, dass es Erfolgsmeldung gegen Umwandlung ist und ich habe nie für Schleife dieses unter der Erwägung, dass, wenn ich nur eine Datei übergeben, i Erfolgsmeldung bekam. Bitte beraten.

+1

Bitte kontaktieren Autor Bibliothek mehrere Dateien oder tun einige Semaphore (Grund multithreinding Sync-Konzept zu unterstützen), die 'convert()' Anruf nicht erlauben würde, ohne vorherigen Job zu beenden – Selvin

+0

Leute sind so scharf darauf, Frage des Anfängers herabzustufen, anstatt zu stützen. Ich habe Angst, jetzt hier zu fragen. –

+0

Die Leute sind so faul zu fragen, bevor Sie ein paar Nachforschungen anstellen ... – Selvin

Antwort

0

Sie können eine Klasseninstanzvariable für einen Index hinzufügen und bei Bedarf inkrementieren, indem Sie die Methode convert() bei Bedarf rekursiv aufrufen. Es wäre in etwa so aussehen (Java ist ein wenig rostig, können Sie Syntax bereinigen müssen):

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

Logisch funktioniert es gut, nur Problem übrig ist als Konverter zu viel Speicher nehmen, so dass System Start suspendiert Threads. –

+0

Gut zu wissen. Wenn Sie Probleme mit dem Speicher haben, erstellen Sie eine separate Frage mit aktualisierten Informationen und Code. Viel Glück! – kpsharp

Verwandte Themen