Java 试着在上面播放声音,结果崩溃了。安卓

Java 试着在上面播放声音,结果崩溃了。安卓,java,android,audio,ontouch,Java,Android,Audio,Ontouch,我是android编程新手,现在我正在努力做我的家庭作业。我在这里读了所有类似的主题,但看起来我遗漏了一些东西。 我需要从raw文件夹中为我的按钮使用onTouch播放一些wav声音。 这是我的密码 import android.media.MediaPlayer; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import a

我是android编程新手,现在我正在努力做我的家庭作业。我在这里读了所有类似的主题,但看起来我遗漏了一些东西。 我需要从
raw
文件夹中为我的按钮使用onTouch播放一些wav声音。 这是我的密码

import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;


public class MainActivity extends AppCompatActivity {



    Button bullButton = (Button) findViewById(R.id.button1);
    MediaPlayer mp;

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

        bullButton.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {

                if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                    mp = MediaPlayer.create(MainActivity.this,R.raw.bull);
                    mp.start();
                }
                else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
                    mp.stop();
                }

                return true;
            }
        });

    }


}
问题是——每次我尝试启动我的应用程序时都会崩溃

我这里有一个崩溃日志:

12/06 17:03:15: Launching app
Cold swapped changes.
$ adb shell am start -n "com.foxysoft.soundplayonclick/com.foxysoft.soundplayonclick.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -D
Waiting for application to come online: com.foxysoft.soundplayonclick.test | com.foxysoft.soundplayonclick
Waiting for application to come online: com.foxysoft.soundplayonclick.test | com.foxysoft.soundplayonclick
Waiting for application to come online: com.foxysoft.soundplayonclick.test | com.foxysoft.soundplayonclick
Connecting to com.foxysoft.soundplayonclick
I/art: Debugger is active
I/System.out: Debugger has connected
I/System.out: waiting for debugger to settle...
Connected to the target VM, address: 'localhost:8601', transport: 'socket'
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/System.out: debugger has settled (1393)
I/InstantRun: Instant Run Runtime started. Android package is com.foxysoft.soundplayonclick, real application class is null.
W/art: Failed to find OatDexFile for DexFile /data/data/com.foxysoft.soundplayonclick/files/instant-run/dex/slice-slice_1-classes.dex ( canonical path /data/data/com.foxysoft.soundplayonclick/files/instant-run/dex/slice-slice_1-classes.dex) with checksum 0x69cf59e0 in OatFile /data/data/com.foxysoft.soundplayonclick/cache/slice-slice_1-classes.dex
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.foxysoft.soundplayonclick, PID: 5533
                  java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.foxysoft.soundplayonclick/com.foxysoft.soundplayonclick.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
                      at android.app.ActivityThread.access$800(ActivityThread.java:151)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:135)
                      at android.app.ActivityThread.main(ActivityThread.java:5254)
                      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:903)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
                   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
                      at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:116)
                      at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:147)
                      at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:27)
                      at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:53)
                      at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:205)
                      at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185)
                      at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:525)
                      at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:193)
                      at com.foxysoft.soundplayonclick.MainActivity.<init>(MainActivity.java:15)
                      at java.lang.reflect.Constructor.newInstance(Native Method)
                      at java.lang.Class.newInstance(Class.java:1606)
                      at android.app.Instrumentation.newActivity(Instrumentation.java:1066)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:135) 
                      at android.app.ActivityThread.main(ActivityThread.java:5254) 
                      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:903) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
12/06 17:03:15:启动应用程序
冷交换更改。
$adb shell am start-n“com.foxysoft.soundplayonclick/com.foxysoft.soundplayonclick.MainActivity”-a android.intent.action.MAIN-c android.intent.category.LAUNCHER-D
正在等待应用程序联机:com.foxysoft.soundplayonclick.test | com.foxysoft.soundplayonclick
正在等待应用程序联机:com.foxysoft.soundplayonclick.test | com.foxysoft.soundplayonclick
正在等待应用程序联机:com.foxysoft.soundplayonclick.test | com.foxysoft.soundplayonclick
连接到com.foxysoft.soundplayonclick
I/art:调试器处于活动状态
I/System.out:调试器已连接
I/System.out:正在等待调试器解决。。。
已连接到目标VM,地址:'localhost:8601',传输:'socket'
I/System.out:正在等待调试器解决。。。
I/System.out:正在等待调试器解决。。。
I/System.out:正在等待调试器解决。。。
I/System.out:正在等待调试器解决。。。
I/System.out:正在等待调试器解决。。。
I/System.out:正在等待调试器解决。。。
I/System.out:调试器已解决(1393)
I/InstantRun:即时运行运行时已启动。Android软件包为com.foxysoft.soundplayonclick,实际应用程序类为null。
W/art:在OatFile/data/data/data/com.foxysoft.soundplayonclick/files/instant-run/dex/slice-slice_1-classes.dex(规范路径/data/data/com.foxysoft.soundplayonclick/files/instant run/dex/slice-slice_1-classes)中的校验和为0x69cf59e0时,找不到DexFile
D/AndroidRuntime:关闭虚拟机
E/AndroidRuntime:致命异常:主
进程:com.foxysoft.soundplayonclick,PID:5533
java.lang.RuntimeException:无法实例化活动组件信息{com.foxysoft.soundplayonclick/com.foxysoft.soundplayonclick.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.view.Window$Callback android.view.Window.getCallback()”
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
在android.app.ActivityThread.access$800(ActivityThread.java:151)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:135)
位于android.app.ActivityThread.main(ActivityThread.java:5254)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
原因:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“android.view.Window$Callback android.view.Window.getCallback()”
位于android.support.v7.app.AppCompateDelegateImplbase。(appCompateDelegateImplbase.java:116)
在android.support.v7.app.AppCompateDelegateImplv9。(AppCompateDelegateImplv9.java:147)
在android.support.v7.app.AppCompateDelegateImplv11。(AppCompateDelegateImplv11.java:27)
在android.support.v7.app.AppCompateDelegateImplv14。(AppCompateDelegateImplv14.java:53)
在android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:205)上
在android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185)上
位于android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:525)
位于android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:193)
位于com.foxysoft.soundplayonclick.MainActivity。(MainActivity.java:15)
位于java.lang.reflect.Constructor.newInstance(本机方法)
位于java.lang.Class.newInstance(Class.java:1606)
位于android.app.Instrumentation.newActivity(Instrumentation.java:1066)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
在android.app.ActivityThread.access$800(ActivityThread.java:151)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:135)
位于android.app.ActivityThread.main(ActivityThread.java:5254)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
我看了这个话题:

看起来我也这么做了,怎么了?

嗯,这个:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.foxysoft.soundplayonclick/com.foxysoft.soundplayonclick.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
并将代码更改为:

Button bullButton;
MediaPlayer mp;

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

    bullButton = (Button) findViewById(R.id.button1); // you need the R.layout.activity_main to be loaded to make a connection to it!
    bullButton.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {

            if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                mp = MediaPlayer.create(MainActivity.this,R.raw.bull);
                mp.start();
            }
            else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
                mp.stop();
            }

            return true;
        }
    });
}
如果您仍然以这种方式收到错误,请与我们共享错误日志。(顺便说一句,问题的格式很好!)

我想是的
Button bullButton ;
MediaPlayer mp;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bullButton = (Button) findViewById(R.id.button1);
    bullButton.setOnTouchListener(...
mp = MediaPlayer.create(MainActivity.this,R.raw.bull);
bullButton = (Button) findViewById(R.id.button1);
mp = MediaPlayer.create(MainActivity.this,R.raw.bull);
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mediaPlayer) {
               bullButton.setOnTouchListener(new View.OnTouchListener() {
               @Override
               public boolean onTouch(View view, MotionEvent motionEvent) {

                 if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                       mp.start();
                  }
                  else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
                        mp.stop();
                  }

                  return true;
                 }
           });
        }
});