2017-07-09 1 views
0

Je fais une application de langue des signes du doigt. J'ai réussi à obtenir les sous-chaînes d'une chaîne à partir de l'entrée de l'utilisateur. Maintenant, chaque lettre a un fichier vidéo correspondant de mon sqlite et je veux le lire sur la vidéo une par une après chaque lettre.Comment lire plusieurs vidéos de sqlite non simultanée (en file d'attente) à videoView via une boucle?

table:

| nom de fichier vidéo |

| a | lettera |

| b | letterb |

| c | letterc | etc.

public void fingerspell(View v) { 
    CharSequence charSequence = etsearch.getText(); 
    String s = charSequence.toString(); 
    int startingletter = 0; 
    int endingletter = 1; 
    String desiredString; 
    int wordlength = etsearch.length(); 
     do{ 

     desiredString = s.substring(startingletter, endingletter); 
     Cursor c = db.rawQuery("SELECT * FROM tblletters WHERE letter like '" + desiredString + "'", null); 
      while (c.moveToNext()) { 
       Toast.makeText(getApplicationContext(), desiredString, Toast.LENGTH_LONG).show(); 
       String video = c.getString(1); 
       int videoResource = getResources(). 
         getIdentifier(video, "raw", getPackageName()); 
       String path = "android.resource://" + getPackageName() + "/" + videoResource; 
       videoview.setVideoURI(Uri.parse(path)); 
       videoview.start(); 
       videoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
        public void onCompletion(MediaPlayer mp) { 
         //can't put startingletter++ here 
        } 
       }); 


       startingletter++; 
       endingletter++; 
      } 
     startingletter++; 
      endingletter++; 
    }while(startingletter<wordlength); 
} 

Seul le toast fonctionne, il lit la première vidéo mais ne joue pas la suivante.

Répondre

0

J'ai trouvé un moyen, je ne suis pas vraiment sûr que ce soit le bon codage, mais il fonctionne maintenant. Basé sur ce que j'ai compris, je boucle le videoview.setOnCompletionListener même si c'est déjà une boucle et j'ai aussi déclaré que les variables incrémentées sont globales donc on peut y accéder à partir de la classe interne. Je suis nouveau dans la programmation.

CharSequence charSequence = etsearch.getText(); 
     String s = charSequence.toString(); 
     int startingletter = 0; 
     String desiredString; 
     int wordlength = etsearch.length(); 
     final ArrayList<String> list = new ArrayList<String>(); 

     while (startingletter < wordlength) { 
      desiredString = s.substring(startingletter, startingletter + 1); 
      list.add(desiredString); 
      startingletter++; 
     } 


     // Toast.makeText(getApplicationContext(), list.get(3), Toast.LENGTH_LONG).show(); 


     listsize = list.size(); 
     pogi = list.get(0); 

     // Toast.makeText(getApplicationContext(), pogi, Toast.LENGTH_LONG).show(); 
     Cursor c = db.rawQuery("SELECT * FROM tblletters WHERE letter like '" + pogi + "'", null); 
     while (c.moveToNext()) { 
      String video = c.getString(1); 
      int videoResource = getResources(). 
        getIdentifier(video, "raw", getPackageName()); 
      String path = "android.resource://" + getPackageName() + "/" + videoResource; 
      videoview.setVideoURI(Uri.parse(path)); 
      videoview.start(); 
     } 


     videoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
      public void onCompletion(MediaPlayer mp) { 
       halimaw++; 
       if (halimaw < listsize) { 
        pogi = list.get(halimaw); 

        Cursor c = db.rawQuery("SELECT * FROM tblletters WHERE letter like '" + pogi + "'", null); 
        c.moveToNext(); 
        String video = c.getString(1); 
        int videoResource = getResources(). 
          getIdentifier(video, "raw", getPackageName()); 
        String path = "android.resource://" + getPackageName() + "/" + videoResource; 
        videoview.setVideoURI(Uri.parse(path)); 
        videoview.start(); 
       } else { 
        halimaw = 0; 
        pogi = ""; 
       } 
       //Toast.makeText(getApplicationContext(), "tapos na", Toast.LENGTH_LONG).show(); 
      } 
     });