2011-08-11 3 views
1

J'ai modifié et essayé plusieurs méthodes. Fondamentalement, il y a un bouton. Ce que je veux que si je clique dessus, il va commencer à jouer le son 'norse' à nouveau toutes les 5 secondes, jusqu'à ce que je clique à nouveau sur ce bouton. J'ai écrit scénario ce qui semble bien pour moi mais tous les accidents de temps :(Voici le code et les erreurs, peut vous aider àrépéter le son toutes les 5 secondes

//BUTTON SHIT\\ 

    teebheli = false; 
    magamine = MediaPlayer.create(this, R.raw.norse); 
    bhelitegija = (Button) findViewById(R.id.bTeeHeli); 
    bhelitegija.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      if (teebheli == false){ 
       bhelitegija.setText("Lõpeta heli!"); 
       magamine.start(); 
       teebheli = true; 
       } 
      if (teebheli == true) { 
       bhelitegija.setText("Tee heli!"); 
       magamine.stop(); 
       teebheli = false; 
      } 

      } 

    }); 
    piiksumine = new Thread(){ 
     public void run(){ 
      try { 
       int piiksumine = 0; 
       while (piiksumine < 5000) { 
        sleep(100); 
        piiksumine = piiksumine + 100; 
       } 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      finally { 
       piiksumine.start(); 
      } 
      } 
     }; 

ET erreur lorsque je clique sur le bouton:.?

08-11 18:09:36.738: ERROR/MediaPlayer(1224): start called in state 0 
08-11 18:09:36.738: ERROR/MediaPlayer(1224): error (-38, 0) 
08-11 18:09:36.746: ERROR/MediaPlayer(1224): stop called in state 0 
08-11 18:09:36.746: ERROR/MediaPlayer(1224): error (-38, 0) 
08-11 18:09:36.777: ERROR/MediaPlayer(1224): Error (-38,0) 
08-11 18:09:36.786: ERROR/MediaPlayer(1224): Error (-38,0) 
+0

damn où êtes-vous de l'homme, ne peut pas savoir quelle langue il est :) – talnicolas

+0

c'est en pur estonien :) – evilone

+0

-> at viimane.voimalus.MainStuff. (MainStuff.java:37) – mibollma

Répondre

1

Vous avez pas définir un nom pour le PreferenceManager.getDefaultSharedPreferencesName

(du haut de ma tête, mais essayer quelque chose comme ce qui suit):.

PreferenceManager.setDefaultValues(context, sharedPreferencesName, 
    sharedPreferencesMode, resId, readAgain); 

Pour ce faire avant d'essayer d'obtenir des préférences partagées.

Mettez tout ce que vous aimez dans les valeurs, consultez la documentation si les noms de variables ne sont pas claires :)

Hope this helps!

EDIT:

Maintenant, vous essayez d'accéder à un MediaPlayer instancié dans un autre thread. Tu ne peux pas faire ça. Vous devez MediaPlayer.create() et MediaPlayer.start() dans le même thread.

+0

en fait, je pense: \t préférences SharedPreferences = PreferenceManager ** ligne suivante ** \t .getDefaultSharedPreferences (getBaseContext()); Je pense que le problème pourrait être vrai faux, car il donne nullexception ou quelque chose: /? – Elven

+0

Lorsque vous essayez d'utiliser 'getDefaultSharedPreferences', il vous donne une exception NullReferenceException car vous n'avez pas encore défini les préférences partagées par défaut. – Codeman

+0

Ok. J'ai édité le code dans la publication OP. Cela devrait être une méthode plus facile. Mais pour une raison quelconque, il semble que cela ne soit pas vrai ou faux du tout. Quel pourrait être le problème ici? – Elven

0

Eh bien une implémentation serait juste commencer une tâche asynchrone, et commencer une boucle infinie, dans la boucle continue à demander l'heure du système, comparer l'heure avec l'heure initiale, si le temps passé est égal à cinq secondes le bip.

+0

J'ai fait redémarrer dans le code. J'essaie différemment. Non, il ne tombe pas en panne, mais il ne fonctionne toujours pas:/ – Elven

+0

Vous pouvez également essayer le gestionnaire d'alarme pour faire feu les bips. – Arveen

0

Il y a beaucoup de piiksumine dans votre Thread, peu importe ce que cela signifie, je préfère donner le Thread et l'int différents noms.

Aussi je ne suis pas sûr de bien comprendre ce qui est prévu ici, mais je ne pense pas que vous devriez démarrer le thread dans sa propre méthode run() avec piiksumine.start();

+0

mais ne devrait pas donner boucle encore et encore, jusqu'à ce qu'on l'appelle arrêter? – Elven

+0

vous devez préparer le MediaPlayer avant d'appeler start(); – Smugrik

+0

Cela ne corrige pas encore l'erreur supérieure. Rien ne change :(Je pense que le problème pourrait être vrai/faux ou dans ceux-ci ... Lorsque je supprime des conditions, cela semble fonctionner, si je veux juste envoyer du son Mais avec des conditions, ça ne marche pas. ! – Elven

0

Vous pouvez essayer d'utiliser android.os.CountDownTimer à la place et utiliser le compte à rebours long. Il existe une méthode onTick() que vous pouvez utiliser pour jouer le son (en définissant 5 secondes pour countDownInterval dans le constructeur). Vous pouvez l'arrêter en appelant cancel() la prochaine fois que vous appuyez sur le bouton.

Questions connexes