2012-06-12 8 views
1

Привет, я новый кодер для Android. У меня есть программа, которая «Воспроизводит» «Паузы» и «Останавливает» локальный файл .mp3. Здесь я нашел источник с этого сайта.Android Mediaplayer

http://android-er.blogspot.com/2010/07/android-mediaplayer.html

Так я отправляю в коде, и все, кажется, работает замечательно, пока я на самом деле не ударил игру и получите ошибку.

Ive попытался прочесть ошибку, но не мог понять, что именно говорят?

Моя ошибка это (LogCat):

06-12 12:02:38.810: E/AndroidRuntime(4190): FATAL EXCEPTION: main 
06-12 12:02:38.810: E/AndroidRuntime(4190): java.lang.NullPointerException 
06-12 12:02:38.810: E/AndroidRuntime(4190):atcom.reg.ihigh.Cocaine$1.onClick(Cocaine.java:53) 
06-12 12:02:38.810: E/AndroidRuntime(4190): at android.view.View.performClick(View.java:2485) 
06-12 12:02:38.810: E/AndroidRuntime(4190): at android.view.View$PerformClick.run(View.java:9089) 
06-12 12:02:38.810: E/AndroidRuntime(4190): at android.os.Handler.handleCallback(Handler.java:587) 
06-12 12:02:38.810: E/AndroidRuntime(4190): at android.os.Handler.dispatchMessage(Handler.java:92) 
06-12 12:02:38.810: E/AndroidRuntime(4190): at android.os.Looper.loop(Looper.java:123) 
06-12 12:02:38.810: E/AndroidRuntime(4190): at android.app.ActivityThread.main(ActivityThread.java:3806) 
06-12 12:02:38.810: E/AndroidRuntime(4190): at java.lang.reflect.Method.invokeNative(Native Method) 
06-12 12:02:38.810: E/AndroidRuntime(4190): at java.lang.reflect.Method.invoke(Method.java:507) 
06-12 12:02:38.810: E/AndroidRuntime(4190): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
06-12 12:02:38.810: E/AndroidRuntime(4190): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
06-12 12:02:38.810: E/AndroidRuntime(4190): at dalvik.system.NativeStart.main(Native Method) 

Класс

package com.reg.ihigh; 

import android.app.Activity; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class Cocaine extends Activity { 
    MediaPlayer mediaPlayer; 
    Button buttonPlayPause, buttonQuit; 
    TextView textState; 

    private int stateMediaPlayer; 
    private final int stateMP_NotStarter = 0; 
    private final int stateMP_Playing = 1; 
    private final int stateMP_Pausing = 2; 

     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.drugg); 

      buttonPlayPause = (Button)findViewById(R.id.playButton); 
      buttonQuit = (Button)findViewById(R.id.quitButton); 
      textState = (TextView)findViewById(R.id.state); 

      buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener); 
      buttonQuit.setOnClickListener(buttonQuitOnClickListener); 

      initMediaPlayer(); 

     } 

     private void initMediaPlayer() 
     { 
     mediaPlayer = new MediaPlayer(); 
      mediaPlayer = MediaPlayer.create(Cocaine.this, R.raw.cocaine); 
      stateMediaPlayer = stateMP_NotStarter; 
      textState.setText("- IDLE -"); 
     } 

     Button.OnClickListener buttonPlayPauseOnClickListener 
     = new Button.OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
     // TODO Auto-generated method stub 
     switch(stateMediaPlayer){ 
     case stateMP_NotStarter: 
     mediaPlayer.start(); 
     buttonPlayPause.setText("Pause"); 
     textState.setText("- PLAYING -"); 
     stateMediaPlayer = stateMP_Playing; 
     break; 
     case stateMP_Playing: 
     mediaPlayer.pause(); 
     buttonPlayPause.setText("Play"); 
     textState.setText("- PAUSING -"); 
     stateMediaPlayer = stateMP_Pausing; 
     break; 
     case stateMP_Pausing: 
     mediaPlayer.start(); 
     buttonPlayPause.setText("Pause"); 
     textState.setText("- PLAYING -"); 
     stateMediaPlayer = stateMP_Playing; 
     break; 
     } 

     } 
     }; 

     Button.OnClickListener buttonQuitOnClickListener 
    = new Button.OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
     // TODO Auto-generated method stub 
     mediaPlayer.stop(); 
     mediaPlayer.release(); 
     finish(); 
     } 
     }; 

} 

Xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<TextView 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 

/> 
<Button 
android:id="@+id/playButton" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 

android:text="Play"/> 
<Button 
android:id="@+id/quitButton" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 

android:text="Quit"/> 
<TextView 
android:id="@+id/state" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
/> 
</LinearLayout> 

EDIT FIX:

Когда я преобразовал мой оригинальный mp3, сжать их некоторые, как это от поврежденного процесса копирования до исходной папки. Так что я просто переделал скопированный и бам. Все работает! Спасибо @MattWolfe

+0

Похоже, что ваш объект mediaPlayer имеет значение NULL. Из приведенного выше кода я не вижу, как это возможно. Есть ли другой код, который вы не отправляли (возможно, onPause или onDestroy?) –

+0

@MattWolfe nope, вот и все. С тех пор не делает. – Reg

+0

Попробуйте изменить: mediaPlayer = MediaPlayer.create (Cocaine.this, R.raw.cocaine); для mediaPlayer = MediaPlayer.create (getApplicationContext(), R.raw.cocaine); – Raykud

ответ

3

MediaPlayer s create() метод says that:

Returns a MediaPlayer object, or null if creation failed 

Именно так обстоит дело Thats происходит в вашем случае. Прочтите это answer и answer для получения дополнительной информации о решении проблемы.

+0

^^ Эти вопросы звучат, по крайней мере, один раз, вообще. Не знаете, если это имеет значение? – Reg

+1

Попробуйте зарегистрировать, что возвращает метод create. Это даст вам представление, если это будет успешным, и, что важно, если оно даже было предпринято до крушения. –

+2

Вы уверены, что ваш файл является допустимым mp3? Кроме того, вы тестируете эмулятор или настоящее устройство? Эмулятор может не поддерживать это. –

0

Выясните, что находится в строке 53, и добавьте чек, чтобы убедиться, что любой объект (слева от.) Не имеет значения null, прежде чем вы вызовете один из его методов.

+0

Линия 53 - mediaPlayer.start() Не видите проблему с этим? – Reg

+0

Укажите, что бы это значило, чтобы применить мой ответ на найденную вами линию. –

+0

ваш медиаплеер имеет значение null, что означает, что всякий раз, когда вы создаете медиаплеер, что-то не так. – Raykud

0

Вы устанавливаете onClickListener перед вызовом метода initMediaPlayer(), который инициализирует mediaPlayer. Поскольку mediaPlayer не инициализируется в вашем onClickListener, он выдает исключение NullPointerException.

В своем onCreate вызовите initMediaPlayer перед установкой onClickListeners.

+0

Я поставил прямо над onClickListeners и получил ту же ошибку. – Reg

+0

Это не имело бы никакого значения, потому что вы не можете щелкнуть, прежде чем вызывается initMediaPlayer, поскольку все события проходят через поток пользовательского интерфейса, который не будет записывать события во время onCreate. –

0

Ваш медиа-ресурс хорошо? Попробуйте его с помощью uri и посмотрите, работает ли он (вы можете использовать URL-адрес для какого-либо онлайн-mp3-файла)