1

こんにちは私はアンドロイドの新しいコーダーです。ローカルの.mp3ファイルを「再生」「一時停止」「停止」するプログラムがあります。このウェブサイトからソースをここで見つけました。

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

だから私はコードを投稿し、実際にプレイを押してエラーが発生するまで、すべてがうまく機能しているようです。

エラーを読み込もうとしましたが、正確に何を言っているのか理解できませんか?

私のエラーはthis(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>

編集修正:

元のmp3を圧縮するために変換したとき、rawフォルダーへのコピープロセスで破損した方法があります。だから私はコピーしたものを再圧縮してバムしました。すべてが機能します!ありがとう@MattWolfe

4

4 に答える 4

3

MediaPlayerscreate()メソッドは次のように述べています。

Returns a MediaPlayer object, or null if creation failed 

それがあなたのケースで起こっているケースです。問題の解決に関する詳細については、この回答とこの回答をお読みください。

于 2012-06-12T17:32:22.680 に答える
0

53行目にあるものを把握し、そのメソッドの1つを呼び出す前に、(。の左側にある)オブジェクトがnullでないことを確認するためのチェックを追加します。

于 2012-06-12T17:13:59.243 に答える
0

あなたのメディアリソースは大丈夫ですか?uri で試してみて、動作するかどうかを確認してください (オンライン mp3 ファイルへの URL を使用できます)。

于 2012-06-12T17:47:44.433 に答える
0

mediaPlayer を初期化するメソッド initMediaPlayer() を呼び出す前に、onClickListener を設定しています。mediaPlayer は onClickListener で初期化されていないため、NullPointerException がスローされます。

onCreate で、onClickListeners を設定する前に initMediaPlayer を呼び出します。

于 2012-06-12T17:25:00.623 に答える