2013-11-19 6 views
0

im пытается поставить звук при открытии экрана всплеска, но song.start() возвращает мне nullpointerexception. Почему это происходит? им с помощью МИН API 11.Android - не удается воспроизвести песню на заставке

код:

public class Splash extends Activity{ 

MediaPlayer song; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.bg); 

    song = MediaPlayer.create(Splash.this, R.raw.splashmusic); 
    song.start(); 
    Thread timer = new Thread(){//create thread to execute one class to another class within a time 
     public void run(){ 
      try{ 
       sleep(5000);//5 seconds of pausing 
      } catch (InterruptedException e){ 
       e.printStackTrace(); 
      }finally{ 
       Intent openMain = new Intent("com.example.hapshare.DashboardActivity"); 
       startActivity(openMain); 
      } 
     } 
    }; 
    timer.start(); 
} 

@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
    song.release(); 
    finish(); 
} 

Logcat:

11-19 09:42:02.631: E/AndroidRuntime(20289): FATAL EXCEPTION: main 
11-19 09:42:02.631: E/AndroidRuntime(20289): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hapshare/com.example.hapshare.Splash}: java.lang.NullPointerException 
11-19 09:42:02.631: E/AndroidRuntime(20289): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2517) 
11-19 09:42:02.631: E/AndroidRuntime(20289): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2574) 
11-19 09:42:02.631: E/AndroidRuntime(20289): at android.app.ActivityThread.access$600(ActivityThread.java:162) 
11-19 09:42:02.631: E/AndroidRuntime(20289): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1413) 
11-19 09:42:02.631: E/AndroidRuntime(20289): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-19 09:42:02.631: E/AndroidRuntime(20289): at android.os.Looper.loop(Looper.java:158) 
11-19 09:42:02.631: E/AndroidRuntime(20289): at android.app.ActivityThread.main(ActivityThread.java:5789) 
11-19 09:42:02.631: E/AndroidRuntime(20289): at java.lang.reflect.Method.invokeNative(Native Method) 
+0

Просьба указать звуковой файл, который вы пытаетесь воспроизвести. Если у вас неправильный формат носителя, create вернет null, посмотрите здесь http://developer.android.com/guide/appendix/media-formats.html – david99world

+0

Я не думаю, что это весь журнал. Должна быть «вызвана» часть –

+0

спасибо @ david99world я решил свою проблему, как только я конвертирую музыкальный файл в mp3 =) – AndroidWorld12

ответ

1

Похоже, ваш MediaPlayer не создается правильно (из документации для MediaPlayer создания()):

Возвращает объект MediaPlayer, или null, если создание не выполнено

так проверить R.raw.splashmusic

От снова Документов:

В этом случае, «сырой» ресурс представляет собой файл, система не пытается разобрать в любой определенный способ. Однако содержание этого ресурса не должно быть сырым звуком. Он должен быть правильно закодированным и отформатированным медиа-файлом в одном из поддерживаемых форматов.

Вы также можете создать объект MediaPlayer таким образом:

try { 
    AssetFileDescriptor afd = this.getResources().openRawResourceFd(R.raw.splashmusic); 

    song = new MediaPlayer(); 
    song.reset(); 
    song.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength()); 
    song.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    song.prepare(); // might take long! (for buffering, etc) 

    song.start(); 
} catch (IllegalStateException e) { 
    e.printStackTrace(); 

} catch (IOException e) { 
    e.printStackTrace(); 
} 

Помните, что подготовка() может занять много времени, так что это не хорошая идея, чтобы создать MediaPlayer на вашем UI потоке. У вас есть 2 варианта здесь:

  • создать еще один поток и нерест MP там
  • использование prepareAsync(), и метод, когда подготовка закончена, onPrepared() из MediaPlayer.OnPreparedListener, сконфигурированный через setOnPreparedListener() называется ,

Пожалуйста, прочитайте больше о MediaPlayer here

Кроме того, при создании намерения, вместо:

Intent openMain = new Intent("com.example.hapshare.DashboardActivity"); 

сделать это:

Intent openMain = new Intent(this, DashboardActivity.class); 
0

Вы имеете неправильный тип носителя, проверка доступные типы носителей developer.android.com/guide/appendix/media-formats.html, так как это приведет к возврату нулевого MediaPlayer.create л.

Смежные вопросы