마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

버튼 클릭만 하면 앱이 종료되요

0 추천
public class MainActivity extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(
                WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);
    }

    public MediaPlayer sp;

    public void s1click(View v){
        sp.create(this, R.raw.sound1);
        sp.start();
    }

    public void s2click(View v) {
        sp.create(this,R.raw.sound2);
        sp.start();
    }

    public void s3click() {
        sp.create(this,R.raw.sound3);
        sp.start();
    }

    public void s4click() {
        sp.create(this, R.raw.sound4);
        sp.start();
    }

    public void s5click() {
        sp.create(this,R.raw.sound5);
        sp.start();
    }

    public void s6click() {
        sp.create(this,R.raw.sound6);
        sp.start();
    }

    public void s7click() {
        sp.create(this, R.raw.sound7);
        sp.start();
    }

    public void s8click() {
        sp.create(this,R.raw.sound8);
        sp.start();
    }

    public void soundstopclick() {
        sp.stop();
        sp.release();
    }
}

 java.lang.IllegalStateException: Could not execute method of the activity
 at android.view.View$1.onClick(View.java:4135)
 at android.view.View.performClick(View.java:5076)
 at android.view.View$PerformClick.run(View.java:20279)
 at android.os.Handler.handleCallback(Handler.java:739)
 at android.os.Handler.dispatchMessage(Handler.java:95)
 at android.os.Looper.loop(Looper.java:135)
 at android.app.ActivityThread.main(ActivityThread.java:5930)
 at java.lang.reflect.Method.invoke(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:372)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)

Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View$1.onClick(View.java:4130)
at android.view.View.performClick(View.java:5076)
at android.view.View$PerformClick.run(View.java:20279) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5930) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 
 

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.start()' on a null object reference
at com.cube.baby1.MainActivity.s1click(MainActivity.java:25)
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at android.view.View$1.onClick(View.java:4130) 
at android.view.View.performClick(View.java:5076) 
at android.view.View$PerformClick.run(View.java:20279) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5930) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 

 

안드로이드 개발 왕초보입니다. 해결방법좀 알려주세요.

익명사용자 님이 2016년 4월 21일 질문

2개의 답변

0 추천

MediaPlayer가 생성되는 부분이 없습니다.

 

onCreate에

sp = new MediaPlayer();

추가가 필요해 보이네요

이카르테 (3,570 포인트) 님이 2016년 4월 21일 답변
추가를 했는데도 종료가 되네요.ㅠㅠ
0 추천
저런식으로 하지 마시구요
onCreate에
MediaPlayer sp = new MediaPlayer();

클래스에 View.OnClickListener인터페이스 implements 해주시고

버튼들마다 Button 객체 생성해주시고 객체마다 setOnClickListener(this) 해주세요

그리고 onCreate함수 밖에 인터페이스를 오버라이드 해주시면 됩니다

인터페이스 함수는 public void onClick(View v) 이렇게 해주시고

switch(v.getId()){

case R.id.Button1:

....

}

}

이런식으로

버튼에 리스너를 정의 해주세요

그리고 case 마다

sp.setDataResource(path);

sp.prepare();

sp.start();

break;

이렇게 해주시면 될겁니다.

path는 내장 메모리 아무데나 넣어주시고 그 경로를 지정해주시면 되요

예를들어서

내장메모리의 mp3라는 폴더에 sound1.mp3 라는 파일이 있으면

path =Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "mp3" + File.separator + "sound1.mp3";

이런식으로 하시면 됩니다.

만약에 오디오파일이 어플에 포함되어있어야 하는거면 create 저걸로 그대로 하시면 됩니다.
안드잘하고싶 (3,310 포인트) 님이 2016년 4월 21일 답변
안드잘하고싶님이 2016년 4월 21일 수정
...