2011-08-02 4 views
0

안드로이드에서 mp3 파일을 재생하고 싶지만 다음과 같은 오류가 발생합니다.파일 재생 중 오류 : Android의 NullPointerException

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(); 
    } 
} 

이 오류를 해결하려면 어떻게해야합니까?

고맙습니다

업데이트

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

확인되지 않은됩니다 java.io.IOException: Prepare Failed .: status = 0x1을 그 위에. 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/ –