2011-08-02 6 views
0
中にNullPointerException

私はアンドロイドでMP3ファイルを再生したいのですが、私はこのエラーを取得:エラー再生中のファイル:アンドロイド

java.lang.NullPointerException at HelloAndroid.playMusic 

package com.bestvalue.hello; 
/*import android.util.Log;*/ 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 
import android.media.MediaPlayer; 
import android.net.Uri; 

public class HelloAndroid extends Activity { 

    public static final String DebugTag = "LogInfo"; 
    public MediaPlayer mp; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     TextView tv = new TextView(this);   
     tv.setText("keke napep"); 
     playMusic(); 
     setContentView(tv);   
     Log.i(DebugTag, "Info about my app na");     
    } 


    public void playMusic() { 
     try { 
      Uri fileName = Uri.parse("http://www.perlgurl.org/podcast/archives/podcasts/PerlgurlPromo.mp3"); 
      mp= MediaPlayer.create(this, fileName); 
      mp.start(); 
     } catch (Exception e){ 
      Log.e(DebugTag, "Error Playing File", e); 
     } 
    } 

    @Override 
    protected void onStop() { 
     if (mp != null) { 
      mp.stop(); 
      mp.release(); 
     } 
     super.onStop(); 
    } 
} 
以下の私のコード

私はこの問題を解決するために何をしますエラー?回答の一部を実装した後

おかげ

UPDATE

package com.bestvalue.hello; 
/*import android.util.Log;*/ 
import android.app.Activity; 
//import android.net.Uri; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 


public class HelloAndroid extends Activity { 

    public static final String DebugTag = "LogInfo"; 
    private MediaPlayer mp = new MediaPlayer(); 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     TextView tv = new TextView(this);   
     tv.setText("keke napep"); 
     playMusic(); 
     setContentView(tv);       
    } 

    public void playMusic() { 
     try { 
      String url = "http://www.perlgurl.org/podcast/archives/podcasts/PerlgurlPromo.mp3"; 
      mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      mp.setDataSource(url); 
      mp.prepare(); 
      mp.start();   
     } catch (Exception e){ 
      Log.e(DebugTag, "Error Playing File", e); 
     } 
    } 

    @Override 
    protected void onStop() { 
     if (mp != null) { 
      mp.stop(); 
      mp.release(); 
     } 
     super.onStop(); 
    } 
} 

、私は今、このエラーが出る:java.io.IOException: Prepare Failed .: status = 0x1

答えて

0

あなたの問題は、メソッドを呼び出す前に、あなたはmpをチェックしていないですその上に。 the documentationによれば、MediaPlayer.createが失敗すると、nullが返されます。

親指のルールNullPointerException s:戻ると返品を確認してください。期待していないときに、何かが通常nullを返していて、そのメソッドを呼び出そうとしています。この場合、fileNameに何も電話していないので、安全です。あなたはmpに何かを呼んでいるので、それはであなたをやっているおそらく何だ

[編集]

オーディオが再生されていないのはなぜ:あなたはsetAudioStreamType(AudioManager.STREAM_MUSIC);とURIの使用を呼び出していません

MediaPlayerインスタンスの作成では、ローカルに格納されているメディアのみが対象となります。ネットワーク媒体は、setDataSource(context, uri);を呼び出すことによってその位置を設定する必要があります。 the (very good) documentationから

Uri myUri = ....; // initialize Uri here 
MediaPlayer mediaPlayer = new MediaPlayer(); 
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mediaPlayer.setDataSource(getApplicationContext(), myUri); 
mediaPlayer.prepare(); 
mediaPlayer.start();` 
+0

申し訳ありませんが、私はここでそれを処理してファイルを再生できますか? –

+0

@Ilango Jは以下のように、mp.prepare();を呼び出す必要があります。私はしばらく時間をとり、ドキュメントに作成されたフローチャートを見て、私はあなたでした:http://developer.android.com/reference/android/media/MediaPlayer.html – Paddy

+0

多分、私は正しいものになっていませんしかし、何も変わっていません –

1

は(mp.start前mp.prepare();を追加します)。

+0

私はちょうどそれを追加した、助けていないようでした –

+0

このリンクを参照してくださいhttp://blog.pocketjourney.com/2008/04/04/tutorial-custom-media-streaming-for-androids-mediaplayer/ –

関連する問題