2017-08-15, 12:11
  #6913
Medlem
inneskos avatar
Citat:
Ursprungligen postat av ArthurDayne
Ja såg det nu Finns det något bättre sätt att få ut rader och kolumner när man läser in text en char i taget?
Lyckades köra programmet utan errors, fick NoSuchElementException för att jag gick utanför gränserna i iteratorn tror jag, har lagt den i while-loop som bara går när den har element i sig så den verkar fungera i alla fall.
Har du ens testat om det där verkligen blir korrekt? Det känns ganska uppenbart att den där koden inte kommer fungera rätt.

Jag ser ingen direkt anledning till att läsa in filen char för char, utan det är väl bättre att läsa in hela filen direkt och sedan ändra om den till en array av chars.
Citera
2017-08-15, 14:52
  #6914
Medlem
Citat:
Ursprungligen postat av innesko
Har du ens testat om det där verkligen blir korrekt? Det känns ganska uppenbart att den där koden inte kommer fungera rätt.

Jag ser ingen direkt anledning till att läsa in filen char för char, utan det är väl bättre att läsa in hela filen direkt och sedan ändra om den till en array av chars.
Har gått tillbaka till att läsa in filen rad för rad, då får jag rows och cols rätt.
Lägger varje rad jag läser i en string builder och sedan i loop gör jag StringBuilder.charAt[] för att få ut varje tecken, lyckas nu kompilera och köra men med lite fel. Labyrinten får rätt rows och cols, men alla tecken är ett *.
Ser att labyrinten blev felaktig när jag försökte klistra in den här men ni fattar säkert poängen, * är väggar, S är start, G är mål och mellanrummen är väg där man kan gå.
Edit: löste problemet, i uppdateras bara i den yttersta loopen så den står alltid och skriver ut första tecknet
__________________
Senast redigerad av ArthurDayne 2017-08-15 kl. 14:59.
Citera
2017-08-17, 12:44
  #6915
Medlem
Facades avatar
Kan någon här hjälpa med med OnCompletionListener?
Jag har googlat som en galning och tycker mig göra exakt som folk säger, men det verkar inte fungera liktförbannat.
Koden ser ut som följande:
Kod:
        if(repeat){
            if(!soundPlayerPlaying){
                chooseSound.start();
                chooseSound.setOnCompletionListener(new OnCompletionListener() {

                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        soundPlayerPlaying = false;
                    }
                });
            }
        }
        else {
            chooseSound.start();
        }

Variabeln "soundPlayerPlaying" är ett test som alltid är false och "repeat" är true.

Det som händer är att den kör "chooseSound.setOnCompletionListener(new OnCompletionListener()" två gånger när jag debuggar den, och sedan hoppar ur det helt.
Och vid nästa omgång så kör den listener igen, två gånger och hoppar ur.
Den går aldrig in i den och gör "mp.release()".
Hur får jag den att hoppa in där?
Citera
2017-08-17, 13:35
  #6916
Medlem
inneskos avatar
Citat:
Ursprungligen postat av Facade
Kan någon här hjälpa med med OnCompletionListener?
Jag har googlat som en galning och tycker mig göra exakt som folk säger, men det verkar inte fungera liktförbannat.
Koden ser ut som följande:
Kod:
        if(repeat){
            if(!soundPlayerPlaying){
                chooseSound.start();
                chooseSound.setOnCompletionListener(new OnCompletionListener() {

                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        soundPlayerPlaying = false;
                    }
                });
            }
        }
        else {
            chooseSound.start();
        }

Variabeln "soundPlayerPlaying" är ett test som alltid är false och "repeat" är true.

Det som händer är att den kör "chooseSound.setOnCompletionListener(new OnCompletionListener()" två gånger när jag debuggar den, och sedan hoppar ur det helt.
Och vid nästa omgång så kör den listener igen, två gånger och hoppar ur.
Den går aldrig in i den och gör "mp.release()".
Hur får jag den att hoppa in där?

Jag tror också att du måste visa mer kod än sådär för att man ska förstå vad som kan vara fel.
Citera
2017-08-17, 13:37
  #6917
Medlem
Facades avatar
Citat:
Ursprungligen postat av innesko
Jag tror också att du måste visa mer kod än sådär för att man ska förstå vad som kan vara fel.
Kod:
class SoundPlayer extends MediaPlayer {

    public static boolean soundPlayerPlaying = false;

    public static void soundPlayerMethod(Context context, Boolean repeat){
    //private void soundPlayerMethod(){


        // Create variable for sound
        MediaPlayer chooseSound = new MediaPlayer();

        // Number of cat sound clips in raw folder
        int max = 17;
        int min = 1;

        // Randomize playbacks of cats
        Random rand = new Random();
        int randomNum = rand.nextInt((max - min) + 1) + min;

        switch (randomNum) {
            case 1:{ chooseSound = MediaPlayer.create(context, R.raw.meow_1);break;}
            case 2:{ chooseSound = MediaPlayer.create(context, R.raw.meow_2);break;}
            case 3:{ chooseSound = MediaPlayer.create(context, R.raw.meow_3);break;}
            case 4:{ chooseSound = MediaPlayer.create(context, R.raw.meow_4);break;}
            case 5:{ chooseSound = MediaPlayer.create(context, R.raw.meow_5);break;}
            case 6:{ chooseSound = MediaPlayer.create(context, R.raw.meow_6);break;}
            case 7:{ chooseSound = MediaPlayer.create(context, R.raw.meow_7);break;}
            case 8:{ chooseSound = MediaPlayer.create(context, R.raw.meow_8);break;}
            case 9:{ chooseSound = MediaPlayer.create(context, R.raw.meow_9);break;}
            case 10:{ chooseSound = MediaPlayer.create(context, R.raw.meow_10);break;}
            case 11:{ chooseSound = MediaPlayer.create(context, R.raw.meow_11);break;}
            case 12:{ chooseSound = MediaPlayer.create(context, R.raw.meow_12);break;}
            case 13:{ chooseSound = MediaPlayer.create(context, R.raw.meow_13);break;}
            case 14:{ chooseSound = MediaPlayer.create(context, R.raw.meow_14);break;}
            case 15:{ chooseSound = MediaPlayer.create(context, R.raw.meow_15);break;}
            case 16:{ chooseSound = MediaPlayer.create(context, R.raw.meow_16);break;}
            case 17:{ chooseSound = MediaPlayer.create(context, R.raw.meow_17);break;}
        }

        //Switch switchRepeat = (Switch) findViewById(R.id.switchRepeat);



        if(repeat){
            if(!soundPlayerPlaying){
                chooseSound.start();
                chooseSound.setOnCompletionListener(new OnCompletionListener() {

                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        soundPlayerPlaying = false;
                    }
                });
            }
        }
        else {
            chooseSound.start();
        }
Citera
2017-08-17, 13:42
  #6918
Medlem
inneskos avatar
Citat:
Ursprungligen postat av Facade
Mer kod.....

Okej, ja det blev inte så mycket klarare från den där koden tror jag. Men är det så att det bara är i debuggern du inte ser att den går in? För är med på att den bara kommer gå in och köra mp.release() först när onCompletion eventet händer, och inte direkt när den kör raden "chooseSound.setOnCompletionListener(new OnCompletionListener()"?
__________________
Senast redigerad av innesko 2017-08-17 kl. 13:44.
Citera
2017-08-17, 13:55
  #6919
Medlem
Facades avatar
Citat:
Ursprungligen postat av innesko
Okej, ja det blev inte så mycket klarare från den där koden tror jag. Men är det så att det bara är i debuggern du inte ser att den går in? För är med på att den bara kommer gå in och köra mp.release() först när onCompletion eventet händer, och inte direkt när den kör raden "chooseSound.setOnCompletionListener(new OnCompletionListener()"?

Lite svårt, men jag kör den metoden från en annan klass.
Det är i debuggern jag ser det och serdan beroende på hur koden uppför sig så tycker jag inte heller att den verkar göra det. Men, jag är nybörjare så jag har nog säkert gjort något fel.

Vet inte riktigt hur jag ska förklara det,
men vid ett knapptryck kör jag koden jag lade in i mitt inlägg. Det fungerar, inga problem.
Sedan har jag en switch som ska göra att koden går i repeat.
Utan en onCompletionListener så bara dundrar den på och kör ljud hela tiden, utan att det tidigare ljudet är färdigt. Dvs, typ 10 ljud samtidigt konstant i ett jäkla oväsen.
Det jag vill är att den ska vänta tills det uppspelade ljudet är färdigt så ska den börja spela nästa.
Citera
2017-08-17, 14:09
  #6920
Medlem
inneskos avatar
Citat:
Ursprungligen postat av Facade
Lite svårt, men jag kör den metoden från en annan klass.
Det är i debuggern jag ser det och serdan beroende på hur koden uppför sig så tycker jag inte heller att den verkar göra det. Men, jag är nybörjare så jag har nog säkert gjort något fel.

Vet inte riktigt hur jag ska förklara det,
men vid ett knapptryck kör jag koden jag lade in i mitt inlägg. Det fungerar, inga problem.
Sedan har jag en switch som ska göra att koden går i repeat.
Utan en onCompletionListener så bara dundrar den på och kör ljud hela tiden, utan att det tidigare ljudet är färdigt. Dvs, typ 10 ljud samtidigt konstant i ett jäkla oväsen.
Det jag vill är att den ska vänta tills det uppspelade ljudet är färdigt så ska den börja spela nästa.

Du får ursäkta men jag har lite svårt att följa vad som händer egentligen.

Menar du att när du har onCompletionListener raden där, så får du inte så att det är flera ljud som spelas samtidigt? Men om du har den raden där så spelas det inte flera ljud samtidigt? Jag har svårt att förstå hur den där raden kommer påverka antalet ljud som spelar över huvud taget?
Citera
2017-08-17, 14:43
  #6921
Medlem
Citat:
Ursprungligen postat av Facade
Lite svårt, men jag kör den metoden från en annan klass.
Det är i debuggern jag ser det och serdan beroende på hur koden uppför sig så tycker jag inte heller att den verkar göra det. Men, jag är nybörjare så jag har nog säkert gjort något fel.

Vet inte riktigt hur jag ska förklara det,
men vid ett knapptryck kör jag koden jag lade in i mitt inlägg. Det fungerar, inga problem.
Sedan har jag en switch som ska göra att koden går i repeat.
Utan en onCompletionListener så bara dundrar den på och kör ljud hela tiden, utan att det tidigare ljudet är färdigt. Dvs, typ 10 ljud samtidigt konstant i ett jäkla oväsen.
Det jag vill är att den ska vänta tills det uppspelade ljudet är färdigt så ska den börja spela nästa.
Hur anropar du den här metoden? Du har uppenbarligen någon slags loop eftersom det blir flera ljud.

Varför sätter du inte soundPlayerPlaying till true när du börjar att spela upp ljud?

Edit:
Rensa bort den kod som inte gör något när du har problem för att undvika konstigheter. Just nu har repeat och soundPlayerPlaying ingen funktion. Ta bort de if-satserna. De skapar bara extra debugsteg när du debuggar och onödigt brus även om de ser helt självklara ut.
__________________
Senast redigerad av e7andy 2017-08-17 kl. 14:53.
Citera
2017-08-17, 18:31
  #6922
Medlem
Facades avatar
Citat:
Ursprungligen postat av innesko
Du får ursäkta men jag har lite svårt att följa vad som händer egentligen.

Menar du att när du har onCompletionListener raden där, så får du inte så att det är flera ljud som spelas samtidigt? Men om du har den raden där så spelas det inte flera ljud samtidigt? Jag har svårt att förstå hur den där raden kommer påverka antalet ljud som spelar över huvud taget?


Citat:
Ursprungligen postat av e7andy
Hur anropar du den här metoden? Du har uppenbarligen någon slags loop eftersom det blir flera ljud.

Varför sätter du inte soundPlayerPlaying till true när du börjar att spela upp ljud?

Edit:
Rensa bort den kod som inte gör något när du har problem för att undvika konstigheter. Just nu har repeat och soundPlayerPlaying ingen funktion. Ta bort de if-satserna. De skapar bara extra debugsteg när du debuggar och onödigt brus även om de ser helt självklara ut.

Jag har svårigheter att förklara hur jag försöker göra eftersom jag inte ens förstår hur jag ska göra det.
Jag har försökt lite annat som att försöka förhindra att jag skapar nya instanser av MediaPlayer hela tiden men jag lyckas inte fixa det.

Det jag vill göra:

Vid knapptryckning anropas "soundPlayerMethod" där via randomisering spelas ljud upp. Detta fungerar.
Men så länge switchRepeat = 1, då ska den köra soundPlayerMethod om och om igen. Detta fungerar.
Problemet är bara att när den kör soundPlayerMethod om och om igen så spelas ljud på ljud på ljud hela tiden. Den låter inte föregående ljud spela färdigt innan nästa börjar.

Knappen som anropas soundPlayerMethod:
Kod:
        final MediaPlayer playSound = new MediaPlayer();
        final SoundPlayer sound = new SoundPlayer();

        playMeow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // After button click, change button text
                playMeow.setText(R.string.generate_meow_after);
                do {
                    try
                    {
                        sound.soundPlayerMethod(Main.this, switchRepeat.isChecked(), playSound);

                    }
                    catch (Exception e)
                    {
                        return;
                    }
                }while(switchRepeat.isChecked());
            }
        });

soundPlayerMethod som anropas av knappen:
Kod:
class SoundPlayer extends MediaPlayer {

    public static void soundPlayerMethod(Context context, Boolean repeat, MediaPlayer chooseSound){

        // Number of cat sound clips in raw folder
        int max = 17;
        int min = 1;


        // Randomize playbacks of cats
        Random rand = new Random();
        int randomNum = rand.nextInt((max - min) + 1) + min;

        switch (randomNum) {
            case 1:{ chooseSound = MediaPlayer.create(context, R.raw.meow_1);break;}
            case 2:{ chooseSound = MediaPlayer.create(context, R.raw.meow_2);break;}
            case 3:{ chooseSound = MediaPlayer.create(context, R.raw.meow_3);break;}
            case 4:{ chooseSound = MediaPlayer.create(context, R.raw.meow_4);break;}
            case 5:{ chooseSound = MediaPlayer.create(context, R.raw.meow_5);break;}
            case 6:{ chooseSound = MediaPlayer.create(context, R.raw.meow_6);break;}
            case 7:{ chooseSound = MediaPlayer.create(context, R.raw.meow_7);break;}
            case 8:{ chooseSound = MediaPlayer.create(context, R.raw.meow_8);break;}
            case 9:{ chooseSound = MediaPlayer.create(context, R.raw.meow_9);break;}
            case 10:{ chooseSound = MediaPlayer.create(context, R.raw.meow_10);break;}
            case 11:{ chooseSound = MediaPlayer.create(context, R.raw.meow_11);break;}
            case 12:{ chooseSound = MediaPlayer.create(context, R.raw.meow_12);break;}
            case 13:{ chooseSound = MediaPlayer.create(context, R.raw.meow_13);break;}
            case 14:{ chooseSound = MediaPlayer.create(context, R.raw.meow_14);break;}
            case 15:{ chooseSound = MediaPlayer.create(context, R.raw.meow_15);break;}
            case 16:{ chooseSound = MediaPlayer.create(context, R.raw.meow_16);break;}
            case 17:{ chooseSound = MediaPlayer.create(context, R.raw.meow_17);break;}
        }

        chooseSound.setOnCompletionListener(new OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                mediaPlayer.stop();
            }
        });
        chooseSound.start();
    }
}


Ber hemskt om ursäkt om jag är otydlig när ni försöker hjälpa.
Känns som att jag själv knappt ens har någon aning om vad jag håller på med...

Jag börjar fundera om onCompletionListener är fel väg att gå, om jag ska använda mig av .isPlaying() istället.
Har försökt med den med, men den verkar inte fungera eftersom det verkar som att det skapas nya instanser av MediaPlayer hela tiden. Trots att jag tycker mig ha lyft ut det på korrekt sätt.
__________________
Senast redigerad av Facade 2017-08-17 kl. 18:34.
Citera
2017-08-17, 19:07
  #6923
Medlem
inneskos avatar
Citat:
Ursprungligen postat av Facade
Jag har svårigheter att förklara hur jag försöker göra eftersom jag inte ens förstår hur jag ska göra det.
Jag har försökt lite annat som att försöka förhindra att jag skapar nya instanser av MediaPlayer hela tiden men jag lyckas inte fixa det.

Det jag vill göra:

Vid knapptryckning anropas "soundPlayerMethod" där via randomisering spelas ljud upp. Detta fungerar.
Men så länge switchRepeat = 1, då ska den köra soundPlayerMethod om och om igen. Detta fungerar.
Problemet är bara att när den kör soundPlayerMethod om och om igen så spelas ljud på ljud på ljud hela tiden. Den låter inte föregående ljud spela färdigt innan nästa börjar.

Knappen som anropas soundPlayerMethod:
Kod:
        final MediaPlayer playSound = new MediaPlayer();
        final SoundPlayer sound = new SoundPlayer();

        playMeow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // After button click, change button text
                playMeow.setText(R.string.generate_meow_after);
                do {
                    try
                    {
                        sound.soundPlayerMethod(Main.this, switchRepeat.isChecked(), playSound);

                    }
                    catch (Exception e)
                    {
                        return;
                    }
                }while(switchRepeat.isChecked());
            }
        });

soundPlayerMethod som anropas av knappen:
Kod:
class SoundPlayer extends MediaPlayer {

    public static void soundPlayerMethod(Context context, Boolean repeat, MediaPlayer chooseSound){

        // Number of cat sound clips in raw folder
        int max = 17;
        int min = 1;


        // Randomize playbacks of cats
        Random rand = new Random();
        int randomNum = rand.nextInt((max - min) + 1) + min;

        switch (randomNum) {
            case 1:{ chooseSound = MediaPlayer.create(context, R.raw.meow_1);break;}
            case 2:{ chooseSound = MediaPlayer.create(context, R.raw.meow_2);break;}
            case 3:{ chooseSound = MediaPlayer.create(context, R.raw.meow_3);break;}
            case 4:{ chooseSound = MediaPlayer.create(context, R.raw.meow_4);break;}
            case 5:{ chooseSound = MediaPlayer.create(context, R.raw.meow_5);break;}
            case 6:{ chooseSound = MediaPlayer.create(context, R.raw.meow_6);break;}
            case 7:{ chooseSound = MediaPlayer.create(context, R.raw.meow_7);break;}
            case 8:{ chooseSound = MediaPlayer.create(context, R.raw.meow_8);break;}
            case 9:{ chooseSound = MediaPlayer.create(context, R.raw.meow_9);break;}
            case 10:{ chooseSound = MediaPlayer.create(context, R.raw.meow_10);break;}
            case 11:{ chooseSound = MediaPlayer.create(context, R.raw.meow_11);break;}
            case 12:{ chooseSound = MediaPlayer.create(context, R.raw.meow_12);break;}
            case 13:{ chooseSound = MediaPlayer.create(context, R.raw.meow_13);break;}
            case 14:{ chooseSound = MediaPlayer.create(context, R.raw.meow_14);break;}
            case 15:{ chooseSound = MediaPlayer.create(context, R.raw.meow_15);break;}
            case 16:{ chooseSound = MediaPlayer.create(context, R.raw.meow_16);break;}
            case 17:{ chooseSound = MediaPlayer.create(context, R.raw.meow_17);break;}
        }

        chooseSound.setOnCompletionListener(new OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                mediaPlayer.stop();
            }
        });
        chooseSound.start();
    }
}


Ber hemskt om ursäkt om jag är otydlig när ni försöker hjälpa.
Känns som att jag själv knappt ens har någon aning om vad jag håller på med...

Jag börjar fundera om onCompletionListener är fel väg att gå, om jag ska använda mig av .isPlaying() istället.
Har försökt med den med, men den verkar inte fungera eftersom det verkar som att det skapas nya instanser av MediaPlayer hela tiden. Trots att jag tycker mig ha lyft ut det på korrekt sätt.

Nu blev det mycket lättare att förstå varför du får ett fel, loopen du kör i första kod stycket i onClick(View v) kommer bara mata på med ljud efter ljud. Jag tror du måste tänka om lite på strukturen i koden för att få en bra lösning på det.

Nu är inte detta nog helt korrekt och jag har inte testa om koden fungerar över huvud taget. Men jag tror att jag skulle försöka få koden till den liknande struktur

Kod:
class SoundPlayer {

	private boolean shouldRepeat = false;
	private Context context;
	private SoundEndedHandler endedHandler = new SoundEndedHandler();
	
	public SoundPlayer(Context context) {
		this.context = context;
	}
	
	public void setRepeat(boolean repeat) {
		shouldRepeat = repeat;
	}
	
	public void play() {
		// Number of cat sound clips in raw folder
		int max = 17;
		int min = 1;


		// Randomize playbacks of cats
		Random rand = new Random();
		int randomNum = rand.nextInt((max - min) + 1) + min;

		switch (randomNum) {
			case 1:{ chooseSound = MediaPlayer.create(context, R.raw.meow_1);break;}
			case 2:{ chooseSound = MediaPlayer.create(context, R.raw.meow_2);break;}
			case 3:{ chooseSound = MediaPlayer.create(context, R.raw.meow_3);break;}
			case 4:{ chooseSound = MediaPlayer.create(context, R.raw.meow_4);break;}
			case 5:{ chooseSound = MediaPlayer.create(context, R.raw.meow_5);break;}
			case 6:{ chooseSound = MediaPlayer.create(context, R.raw.meow_6);break;}
			case 7:{ chooseSound = MediaPlayer.create(context, R.raw.meow_7);break;}
			case 8:{ chooseSound = MediaPlayer.create(context, R.raw.meow_8);break;}
			case 9:{ chooseSound = MediaPlayer.create(context, R.raw.meow_9);break;}
			case 10:{ chooseSound = MediaPlayer.create(context, R.raw.meow_10);break;}
			case 11:{ chooseSound = MediaPlayer.create(context, R.raw.meow_11);break;}
			case 12:{ chooseSound = MediaPlayer.create(context, R.raw.meow_12);break;}
			case 13:{ chooseSound = MediaPlayer.create(context, R.raw.meow_13);break;}
			case 14:{ chooseSound = MediaPlayer.create(context, R.raw.meow_14);break;}
			case 15:{ chooseSound = MediaPlayer.create(context, R.raw.meow_15);break;}
			case 16:{ chooseSound = MediaPlayer.create(context, R.raw.meow_16);break;}
			case 17:{ chooseSound = MediaPlayer.create(context, R.raw.meow_17);break;}
		}

		chooseSound.setOnCompletionListener(endedHandler);
		chooseSound.start();
	}
	
	private class SoundEndedHandler implements OnCompletionListener {
		public void onCompletion(MediaPlayer sound) {
			sound.release();
			if (shouldRepeat) {
				play();
			}
		}
	}
}

och sen bör det andra kod stycket se ut något som

Kod:
final SoundPlayer soundPlayer = new SoundPlayer(Main.this);

playMeow.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
		// After button click, change button text
		playMeow.setText(R.string.generate_meow_after);
		soundPlayer.setRepeat(switchRepeat.isChecked()); // Detta borde ligga i en listener som kollar om switchRepeat ändrar state.
		try
		{
			soundPlayer.play();

		}
		catch (Exception e)
		{
			return;
		}
	}
});

Detta bör åtminstone vara en ganska bra början på hur man får låtarna att fortsätta om switchRepeat är checkad, men det finns fortfarande lite som måste finslipas. (Fast koden kanske inte ens fungerar)
__________________
Senast redigerad av innesko 2017-08-17 kl. 19:48.
Citera
2017-08-17, 20:13
  #6924
Medlem
Facades avatar
Citat:
Ursprungligen postat av innesko
Nu blev det mycket lättare att förstå varför du får ett fel, loopen du kör i första kod stycket i onClick(View v) kommer bara mata på med ljud efter ljud. Jag tror du måste tänka om lite på strukturen i koden för att få en bra lösning på det.

Nu är inte detta nog helt korrekt och jag har inte testa om koden fungerar över huvud taget. Men jag tror att jag skulle försöka få koden till den liknande struktur

Kod:
class SoundPlayer {

	private boolean shouldRepeat = false;
	private Context context;
	private SoundEndedHandler endedHandler = new SoundEndedHandler();
	
	public SoundPlayer(Context context) {
		this.context = context;
	}
	
	public void setRepeat(boolean repeat) {
		shouldRepeat = repeat;
	}
	
	public void play() {
		// Number of cat sound clips in raw folder
		int max = 17;
		int min = 1;


		// Randomize playbacks of cats
		Random rand = new Random();
		int randomNum = rand.nextInt((max - min) + 1) + min;

		switch (randomNum) {
			case 1:{ chooseSound = MediaPlayer.create(context, R.raw.meow_1);break;}
			case 2:{ chooseSound = MediaPlayer.create(context, R.raw.meow_2);break;}
			case 3:{ chooseSound = MediaPlayer.create(context, R.raw.meow_3);break;}
			case 4:{ chooseSound = MediaPlayer.create(context, R.raw.meow_4);break;}
			case 5:{ chooseSound = MediaPlayer.create(context, R.raw.meow_5);break;}
			case 6:{ chooseSound = MediaPlayer.create(context, R.raw.meow_6);break;}
			case 7:{ chooseSound = MediaPlayer.create(context, R.raw.meow_7);break;}
			case 8:{ chooseSound = MediaPlayer.create(context, R.raw.meow_8);break;}
			case 9:{ chooseSound = MediaPlayer.create(context, R.raw.meow_9);break;}
			case 10:{ chooseSound = MediaPlayer.create(context, R.raw.meow_10);break;}
			case 11:{ chooseSound = MediaPlayer.create(context, R.raw.meow_11);break;}
			case 12:{ chooseSound = MediaPlayer.create(context, R.raw.meow_12);break;}
			case 13:{ chooseSound = MediaPlayer.create(context, R.raw.meow_13);break;}
			case 14:{ chooseSound = MediaPlayer.create(context, R.raw.meow_14);break;}
			case 15:{ chooseSound = MediaPlayer.create(context, R.raw.meow_15);break;}
			case 16:{ chooseSound = MediaPlayer.create(context, R.raw.meow_16);break;}
			case 17:{ chooseSound = MediaPlayer.create(context, R.raw.meow_17);break;}
		}

		chooseSound.setOnCompletionListener(endedHandler);
		chooseSound.start();
	}
	
	private class SoundEndedHandler implements OnCompletionListener {
		public void onCompletion(MediaPlayer sound) {
			sound.release();
			if (shouldRepeat) {
				play();
			}
		}
	}
}

och sen bör det andra kod stycket se ut något som

Kod:
final SoundPlayer soundPlayer = new SoundPlayer(Main.this);

playMeow.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
		// After button click, change button text
		playMeow.setText(R.string.generate_meow_after);
		soundPlayer.setRepeat(switchRepeat.isChecked()); // Detta borde ligga i en listener som kollar om switchRepeat ändrar state.
		try
		{
			soundPlayer.play();

		}
		catch (Exception e)
		{
			return;
		}
	}
});

Detta bör åtminstone vara en ganska bra början på hur man får låtarna att fortsätta om switchRepeat är checkad, men det finns fortfarande lite som måste finslipas. (Fast koden kanske inte ens fungerar)

Koden fungerade hur bra som helst!
En OnClickListener på switchRepeat lade jag till och det fungerade perfekt!
Enda "problemet" är att jag kan starta flera instanser av repeat, så jag kan ha många som går på repeat samtidigt.
Å andra sidan, så låter det ganska kul
Nu har jag något att jobba på! Tack så hemskt mycket!
Och så ska jag förstå mig på varför detta fungerade så bra, och inte det jag höll på med.
Men verkar som att jag iallafall var lite på rätt spår med att försöka lyfta ut MediaPlayer så den inte skapas varje gång koden körs osv.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in