2014-11-14 65 views
0

試圖編寫一個簡單的程序。四個ImageButtons,任何一次點擊,一個特定的音樂播放消息顯示;再次點擊任何按鈕,音樂停止並再次顯示消息。問題是,第一次點擊開始和第二次點擊停止執行完美;當我按下任何按鈕時會出現問題,此消息顯示:「不幸的是程序已停止」或類似的東西,程序崩潰。音樂播放和停止與ImageButtons點擊消息

package com.example.appliedexperimentz; 

import android.app.Activity; 
import android.graphics.drawable.AnimationDrawable; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ImageButton; 
import android.widget.ImageView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
private MediaPlayer mp; 
ImageView iv; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mp = new MediaPlayer(); 
    iv = (ImageView) findViewById(R.id.spaceForAnimation); 
    iv.setBackgroundResource(R.drawable.animestore); 
    } 



public void imageButton1(View v) { 

    if(mp.isPlaying()){ 
     mp.release(); 
     Toast.makeText(MainActivity.this, "Music Stopped!", Toast.LENGTH_LONG).show(); 
    }else{ 
    mp = MediaPlayer.create(this, R.raw.firstmusik); 
    mp.start(); 
    Toast.makeText(MainActivity.this, "First Music!", Toast.LENGTH_LONG).show(); 
    } 
} 
public void imageButton2(View v) { 

    if(mp.isPlaying()){ 
    mp.release(); 
    Toast.makeText(MainActivity.this, "Music Stopped!", Toast.LENGTH_LONG).show(); 
    }else{ 
    mp = MediaPlayer.create(this, R.raw.secondmusik); 
    mp.start(); 
    Toast.makeText(MainActivity.this, "Second Music!", Toast.LENGTH_LONG).show(); 
    } 
} 
public void imageButton3(View v) { 

    if(mp.isPlaying()){ 
    mp.release(); 
    Toast.makeText(MainActivity.this, "Music Stopped!", Toast.LENGTH_LONG).show(); 
    }else{ 
    mp = MediaPlayer.create(this, R.raw.thirdmusik); 
    mp.start(); 
    Toast.makeText(MainActivity.this, "Third Music!", Toast.LENGTH_LONG).show(); 
     } 
} 
public void imageButton4(View v) { 

    if(mp.isPlaying()){ 
     mp.release(); 
     Toast.makeText(MainActivity.this, "Music Stopped!", Toast.LENGTH_LONG).show(); 
    }else{ 
    mp = MediaPlayer.create(this, R.raw.fourthmusik); 
    mp.start(); 
    Toast.makeText(MainActivity.this, "Fourth Music!", Toast.LENGTH_LONG).show(); 
    } 
} 
@Override 
public void onDestroy() { 
    mp.release(); 
} 
} 

這裏去logcat的錯誤:

11-14 23:23:31.943:E/AndroidRuntime(659):致命異常:主要 11-14 23:23:31.943:E/AndroidRuntime (659):java.lang.IllegalStateException:無法執行活動的方法 11-14 23:23:31.943:E/AndroidRuntime(659):at android.view.View $ 1.onClick(View.java:3044) E/AndroidRuntime(659):at android.view.View.performClick(View.java:3511) 11-14 23:23:31.943:E/AndroidRuntime(659):at android.view.View $ PerformClick.run(View.java:14105) 11-14 23:23:31。 943:E/AndroidRuntime(659):在android.os.Handler.handleCallback(Handler.java:605) 11-14 23:23:31.943:E/AndroidRuntime(659):at android.os.Handler.dispatchMessage Handler.java:92) 11-14 23:23:31.943:E/AndroidRuntime(659):at android.os.Looper.loop(Looper.java:137) 11-14 23:23:31.943:E/AndroidRuntime(659):at android.app.ActivityThread.main(ActivityThread.java:4424) 11-14 23:23:31.943:E/AndroidRuntime(659):at java.lang.reflect.Method.invokeNative(Native Method ) 11-14 23:23:31.943:E/AndroidRuntime(659):at java.lang.reflect.Method.invoke(Method.java:511) 11-14 23:23:31.943:E/AndroidRuntime(659) ):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784) 11-14 23:23:31.943:E/AndroidRuntime(659):at com.android.internal.os.ZygoteInit 。主要(ZygoteInit.java:551) 11-14 23:23:31.943:E/AndroidRuntime(659):at dalvik.system.NativeStart.main(Native Method) 11-14 23:23:31.943:E/AndroidRuntime 659):引起:java.lang.reflect.InvocationTargetException 11-14 23:23:31.943:E/AndroidRuntime(659):at java.lang.reflect.Method.invokeNative(Native Method) 11-14 23: 23:31.943:E/AndroidRuntime(659):在java.lang.reflect.Method.invoke(Method.java:511) 11-14 23:23:31.943:E/AndroidRuntime(659):at android.view。查看$ 1.onClick(View.java:3039) 11-14 23:23:31.943:E/AndroidRuntime(659):... 11更多 11-14 23:23:31.943:E/AndroidRuntime(659)由於:java.lang.IllegalStateException 11-14 23:23:31.943:E/AndroidRuntime(659):在android.media.MediaPlayer.isPlaying(本機方法) 11-14 23:23:31.943:E/AndroidRuntime(659):at com.example.appliedexperimentz.MainActivity.imageButton3(MainActivity.java:59) 11-14 23:23:31.943:E/AndroidRuntime(659) ... 14多個

回答

0

更改您按一下按鈕的功能如下

public void releasePlayer() { 
    mp.release(); 
    mp = null; 
} 

public void imageButton1(View v) { 

    if (mp != null && mp.isPlaying()) { 
     releasePlayer(); 
     Toast.makeText(MainActivity.this, "Music Stopped!", 
       Toast.LENGTH_LONG).show(); 
    } else { 
     mp = MediaPlayer.create(this, R.raw.muzika); 
     mp.start(); 
     Toast.makeText(MainActivity.this, "First Music!", Toast.LENGTH_LONG) 
       .show(); 
    } 

} 

執行上述更改所有按鈕的點擊事件。希望這會有所幫助:)

+0

再次感謝你的友善和樂於助人。我遇到了一些錯誤,可能是因爲我改變了舊程序中的代碼。明天我將重新制作另一個程序,並附上你的這些代碼,當然會讓你知道它的結果。再次感謝。 – 2014-11-17 17:35:03

+0

很高興知道上面的代碼爲你工作:) – Jickson 2014-11-17 19:02:53

+0

你知道,我真的缺乏用適當的評估數組裝飾的話。你真的很聰明,希望我能夠獲得最小的智力。任何話都無法滿足我對你的好感,因爲你對像我這樣的新手有好感。我只需要一個忙就可以請你解釋一下我以前的代碼所犯的錯誤,以及爲什麼當你改變它的時候,它會完美地運行嗎?請讓我知道,除非我會完全黑暗。急切等待。保重並再次感謝.. – 2014-11-18 17:21:16