2017-02-26 52 views
0

當我在代碼中使用MediaPlayer插件並將其部署到仿真器或Android設備上時,構建完成時沒有錯誤,但應用程序在設備上啓動時崩潰。MediaPlayer插件導致應用程序崩潰

的Java:MainActivity.java

package com.oniichan.launchpadify; 

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

public class MainActivity extends AppCompatActivity { 


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

    final MediaPlayer mp = MediaPlayer.create(this, R.raw.clap1); 

    public void clapone(View v){ 
     Toast.makeText(this, "Playing clap1.wav", Toast.LENGTH_SHORT).show(); 
     mp.start(); 
    } 
} 

XML:activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.oniichan.launchpadify.MainActivity"> 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true"> 

     <Button 
      android:layout_width="150px" 
      android:layout_height="150px" 
      android:layout_margin="10dp" 
      android:id="@+id/play1" 
      android:onClick="clapone" 
      /> 

    </FrameLayout> 
</RelativeLayout> 

問題的行是

final MediaPlayer mp = MediaPlayer.create(this, R.raw.clap1); 

如果我在程序中註釋掉上面的行,一切似乎都正常。只有當我預測到有什麼好事發生時纔會取消註釋,應用程序就會崩潰。下面是應用

Application Layout in Android Studio

Application Crash on Emulator

要保持乾淨的東西,我把問題記錄在引擎收錄 查找這裏的截圖:pastebin.com/NGrqTmAf

+0

在你想知道的情況下,是在左上角的廣場是一個按鈕,我用來播放聲音 – Shanu

+0

Logcat(Android Monitor)中必須有崩潰報告它在那裏有什麼說的? – 0X0nosugar

回答

0

此行

最終的MediaPlayer mp = MediaPlayer.create(this,R.raw.clap1);

在Activity完全實例化之前執行,所以this尚不存在。

如果你想有MediaPlayer作爲成員變量,離開了final並做到這一點是這樣的:

public class MainActivity extends AppCompatActivity { 

    private MediaPlayer mp; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mp = MediaPlayer.create(this, R.raw.clap1); 
    } 

    // other code here... 
} 
+0

這工作得很好。你搖滾! – Shanu