2011-08-11 91 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

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

回答

1

你有没有为PreferenceManager.getDefaultSharedPreferencesName设置一个名称

(关我的头顶部,但你可以试试以下):

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

在尝试获取共享首选项之前执行此操作。

放置任何你喜欢的值,检查文件是否变量名都不清楚:)

希望这有助于!

编辑:

现在,您试图访问在另一个线程实例化一个MediaPlayer的。你不能这样做。您需要将MediaPlayer.create()和MediaPlayer.start()放在同一个线程中。

+0

实际上,我认为:\t SharedPreferences首选项= PreferenceManager **下一行** \t .getDefaultSharedPreferences(getBaseContext());我认为问题可能是真实的错误,因为它可以提供虚拟或其他东西:/? – Elven

+0

当您尝试使用'getDefaultSharedPreferences'时,它会给您一个NullReferenceException,因为您尚未设置默认的共享首选项。 – Codeman

+0

好的。我在OP后编辑了代码。这应该是更简单的方法。但由于某种原因,它看起来并不真或假。那里可能有什么问题? – Elven

0

好一个实现是刚开始一个异步任务,并开始一个无限循环,在循环中不断地问了系统时间,比较初始时间的时间,如果时间过去了等于到五秒的只是火哔哔声。

+0

我用代码重启了。我尝试不同的方式。不是它不会崩溃,但它仍然无法正常工作:/ – Elven

+0

你也可以尝试报警管理器来启动蜂鸣声。 – Arveen

0

有一个在你的线程很多piiksumine的,这意味着什么,我宁愿给螺纹和INT不同的名称。

而且我不知道我的理解以及什么在这里是的,但我不认为你应该在自己的运行启动线程()方法piiksumine.start();

+0

但是不应该给循环一遍又一遍,直到它被称为停止? – Elven

+0

你应该在调用start()之前准备MediaPlayer; – Smugrik

+0

这还不能解决上面的错误。没有什么变化:(我认为问题可能在真/假或在这些...当我删除条件,它似乎工作,如果我只是想发送声音。但有条件,它不工作,但我需要条件! – Elven

0

你可以尝试使用android.os.CountDownTimer来代替,而使用长倒计时。有一个onTick()方法可用来播放声音(通过在构造函数中将countDownInterval设置为5秒)。您可以通过在下次按下按钮时调用cancel()来停止它。