2014-09-30 2 views
0

NullPointerException getPlaylist() 메소드를 Android의 다른 활동에서 호출 할 때. 방법은 다음Android에서 getContentResolver(). 쿼리가있는 메소드를 호출 할 때 NPE

이 세부있는 오디오 정보는 다음 커서 커서를 사용하여 반환 = getContentResolver(). 쿼리를 얻기 위해 (미디어 스토어 MediaStore ... )을 가정한다.

두 가지 활동 (AudioPlayerActivity, FileManager)을 사용하여 사용자 지정 오디오 플레이어를 작업하고 있습니다. AudioPlayerActivity는 FileManager **를 사용하여 오디오 파일 목록을 가져온 다음 재생합니다.

다음은 스 니펫입니다. 다음은 AudioPlayerActivity.java

ArrayList<HashMap<String, String>> audioList = new ArrayList<HashMap<String, String>>(); 

mp = new MediaPlayer(); 
fileManager = new FileManager(); 

audioList = fileManager.getPlaylist(); // NPE when calling this method! 

playAudio(0); 

이며, 다음은 모든 오디오 파일을 읽고 미디어 스토어 MediaStore API를 사용하여 ArrayList의에서 (MP3의 ID 태그와 같은) 내용을 저장 FileManager.java, 입니다.

public class FileManager extends Activity { 

    @Override 
    public void onCreate(Bundle SavedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // no view. just getting audio files 
    } 

    public ArrayList<HashMap<String, String> getPlaylist() { 
     String[] proj = { MediaStore.Audio.Media._ID }; 

     Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, proj, null, null, null} 

     Log.d("debug", "is cursor?"); // NPE here! 

     return list; 
    } 

그것은 줄 NullPointerException이 제공

09-30 11:55:35.265: D/AndroidRuntime(13516): Shutting down VM 
09-30 11:55:35.265: W/dalvikvm(13516): threadid=1: thread exiting with uncaught exception (group=0x41d37c08) 
09-30 11:55:35.270: E/AndroidRuntime(13516): FATAL EXCEPTION: main 
09-30 11:55:35.270: E/AndroidRuntime(13516): Process: project.sample.audioplayer, PID: 13516 
09-30 11:55:35.270: E/AndroidRuntime(13516): java.lang.RuntimeException: Unable to start activity ComponentInfo{project.sample.audioplayer/project.sample.audioplayer.AudioPlayerActivity}: java.lang.NullPointerException 
09-30 11:55:35.270: E/AndroidRuntime(13516): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305) 
09-30 11:55:35.270: E/AndroidRuntime(13516): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363) 
09-30 11:55:35.270: E/AndroidRuntime(13516): at android.app.ActivityThread.access$900(ActivityThread.java:161) 
09-30 11:55:35.270: E/AndroidRuntime(13516): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265) 
09-30 11:55:35.270: E/AndroidRuntime(13516): at android.os.Handler.dispatchMessage(Handler.java:102) 
09-30 11:55:35.270: E/AndroidRuntime(13516): at android.os.Looper.loop(Looper.java:157) 
09-30 11:55:35.270: E/AndroidRuntime(13516): at android.app.ActivityThread.main(ActivityThread.java:5356) 
09-30 11:55:35.270: E/AndroidRuntime(13516): at java.lang.reflect.Method.invokeNative(Native Method) 
09-30 11:55:35.270: E/AndroidRuntime(13516): at java.lang.reflect.Method.invoke(Method.java:515) 
09-30 11:55:35.270: E/AndroidRuntime(13516): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
09-30 11:55:35.270: E/AndroidRuntime(13516): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
09-30 11:55:35.270: E/AndroidRuntime(13516): at dalvik.system.NativeStart.main(Native Method) 
09-30 11:55:35.270: E/AndroidRuntime(13516): Caused by: java.lang.NullPointerException 
09-30 11:55:35.270: E/AndroidRuntime(13516): at android.content.ContextWrapper.getContentResolver(ContextWrapper.java:104) 
09-30 11:55:35.270: E/AndroidRuntime(13516): at project.sample.audioplayer.FileManager.getPlaylist(FileManager.java:35) 
09-30 11:55:35.270: E/AndroidRuntime(13516): at project.sample.audioplayer.AudioPlayerActivity.onCreate(AudioPlayerActivity.java:70) 
09-30 11:55:35.270: E/AndroidRuntime(13516): at android.app.Activity.performCreate(Activity.java:5426) 
09-30 11:55:35.270: E/AndroidRuntime(13516): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
09-30 11:55:35.270: E/AndroidRuntime(13516): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269) 
09-30 11:55:35.270: E/AndroidRuntime(13516): ... 11 more 

로그 캣이 갖는 getContentResolver(). 질의().

무엇이 누락 되었습니까? 또는 onCreate() 메서드 대신 커서 cursor = getContentResolver(). query (MediaStore ...)를 사용할 수 있습니까?

나는 파일 클래스 대신 미디어 스토어 MediaStore의 FileManger.java에서 사용시 작동으로 AudioPlayerAcitivity.java가 문제가 아니라는 것을 확신합니다.

+0

후 로그 캣에서 완벽한 스택 추적 컨텍스트를 사용할 수 있습니다 – Karakuri

답변

1

getContentResolver()을 적절한 컨텍스트와 함께 호출해야합니다. 대신 활동에서 파일 관리자를 확장

, 바로 호출 활동 (AudioPlayerActivity.java)의 맥락에서 통과, 당신은 Cursor cursor = context.getContentResolver()...

관련 문제