2013-03-15 66 views
0

我已經在線查看類似的線程,但沒有任何幫助。我的仿真器每次嘗試運行我的代碼時崩潰

我試圖做onClick按鈕聲音的簡單任務。我一直努力工作數小時,試圖獲得正確的代碼,只要它看起來能夠工作,它甚至不會運行。

它說:「不幸的是,嘗試已停止。」和我的LogCat文件打開200 +錯誤信息,沒有任何意義。

你能看看我的代碼,並告訴我是什麼問題?謝謝。

package com.example.attempt; 

import android.app.Activity; 
import android.content.Context; 
import android.media.AudioManager; 
import android.os.Bundle; 
import android.view.SoundEffectConstants; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class MainActivity extends Activity implements OnClickListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button button=(Button) findViewById(R.id.muteButton); 
     button.setOnClickListener(this); 
    } 

     AudioManager audioManager = 
       (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 




    public void onClick(View v) { 
     audioManager.playSoundEffect(SoundEffectConstants.CLICK); 
    } 
} 
+0

據我所知,仿真器沒有按」 t處理t他的AudioManager非常好。而且,就像第一個答案所顯示的那樣,你在錯誤的時間實例化了它。發佈logcat也會有幫助。 (如果您沒有將正確的權限添加到您的清單中,您可能會遇到安全異常) – DigCamara 2013-03-15 19:46:30

+0

您還需要發佈佈局(xml)。你顯然正在嘗試使用TextView作爲Button ... – DigCamara 2013-03-15 20:14:06

回答

5

初始化AudioManager audioManager實例內onCreate方法:

AudioManager audioManager; //<<<< declare here... 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button button=(Button) findViewById(R.id.muteButton); 
     button.setOnClickListener(this); 

     /// initialize here 
     audioManager = 
       (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 
    } 
+1

+1是的,這是正確的答案!由於@ user83676在作爲實例變量創建之前正在初始化AudioManager,因此它不起作用。 Android在onCreate之前不允許系統服務。 – 2013-03-15 19:52:49

+0

這是有道理的,但當我運行它時,我仍然收到大量的錯誤消息。 300+在LogCat文件! :( – user83676 2013-03-15 19:57:10

+0

@ user83676:如果你仍然收到錯誤,然後PLZ添加LogCat文件包含問題 – 2013-03-15 20:03:13

1

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button button=(Button) findViewById(R.id.muteButton); 
    button.setOnClickListener(this); 
} 

    AudioManager audioManager = 
      (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 

將其更改爲

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

AudioManager audioManager = 
       (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 
     Button button=(Button) findViewById(R.id.muteButton); 
     button.setOnClickListener(this); 
    } 
+0

我複製粘貼在你做的,但它沒有工作!它仍然崩潰:( – user83676 2013-03-15 19:49:21

+0

你需要聲明audioManager作爲一個成員變量,以便onClick有權訪問它。這段代碼將不會按原樣工作。 – dymmeh 2013-03-15 19:50:03

+0

我開始用java編碼,就像一個星期前,我不知道怎麼回事!!哈哈。 我該怎麼做? – user83676 2013-03-15 19:51:10

相關問題