2011-08-11 13 views
1

私は多くの方法を編集して試しました。基本的にボタンがあります。私がそれをクリックすると、5秒おきにもう一度、そのボタンを再びクリックするまで、音 'norse'を再生し始めます。私は私のために罰金思われるもののスクリプトを書きましたが、私はボタンをクリックしたときに毎回クラッシュ:(ここでは助けることができ、5秒ごとに音が繰り返されます

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

とエラーコードとエラーです:

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

あなたは人からですか、それはどの言語であるかを知ることはできません:) – talnicolas

+0

それは純粋なエストニア語です:) – evilone

+0

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

答えて

1

あなたが持っています。? 。(私の頭の上から、しかし、次のようなものを試してみてください)

PreferenceManager.getDefaultSharedPreferencesNameの名前を設定していない:

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

共有プリファレンスを取得する前にこれを行います。変数名は:)このことができます

希望明らかにされていない場合は、値のためで好きな

入れは、ドキュメントをチェック!

EDIT:

今、あなたは別のスレッドでインスタンス化のMediaPlayerにアクセスしようとしています。あなたはこれをすることはできません。同じスレッドでMediaPlayer.create()とMediaPlayer.start()が必要です。

+0

実際には、私は思う:\t SharedPreferences preferences = PreferenceManager **次の行** \t .getDefaultSharedPreferences(getBaseContext());私は問題が本当の偽であるかもしれないと思う。 – Elven

+0

'getDefaultSharedPreferences'を使用しようとすると、デフォルトの共有環境設定をまだ設定していないので、NullReferenceExceptionが返されます。 – Codeman

+0

私はOPのポストでコードを編集しました。それは簡単な方法でなければなりません。しかし何らかの理由で、それは本当に偽にならないようです。何が間違っているのでしょうか? – Elven

0

よく実装されているのは、非同期タスクを開始してループ内で無限ループを開始することです。システム時間を尋ね続け、最初の時間と時間を比較します。ビープ音。

+0

コードで再起動しました。私は別の方法を試してみる。それはクラッシュしませんでしたが、それでも動作しません:/ – Elven

+0

あなたはまた、ビープ音を起動するアラームマネージャーを試すことができます。 – Arveen

0

あなたのスレッドには多くのpiiksumineがありますが、それは何を意味していても、スレッドとintの異なる名前を与えたいと思います。

また、私はここで意図していることをよく理解していませんが、piiksumine.start()で独自のrun()メソッドでスレッドを開始する必要はないと思います。

+0

しかし、それは停止と呼ばれるまで繰り返すループを何度も繰り返すべきではありませんか? – Elven

+0

start()を呼び出す前にMediaPlayerを準備する必要があります。 – Smugrik

+0

それでも、上位エラーは修正されません。何も変わっていない:(私は、問題が真実か偽であるか、これらの中にあると思います...私が条件を取り除くと、私はただ音を送りたいと思えばうまくいくようですが、条件付きでは、 ! – Elven

0

代わりにandroid.os.CountDownTimerを使用して、長いカウントダウンを試してみることができます。コンストラクタでcountDownIntervalを5秒に設定することで、サウンドを再生するためのメソッドonTick()が用意されています。次回ボタンが押されたときにcancel()を呼び出すと、停止することができます。

関連する問題