2014-09-30 58 views
0

調用時發生的NullPointerException異常getPlaylist()方法來自Android中的其他活動。 的方法應該接受,則音頻信息使用光標光標返回它= getContentResolver()查詢(MediaStore ... 當調用具有getContentResolver()的方法時的NPE Android中的查詢

下面是詳細信息。

我正在使用兩個活動(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); 

,下一個是FileManager.java,其內容爲所有音頻文件,並使用MediaStore API存儲在ArrayList中的詳細信息(如MP3 ID標籤)。

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

logcat的

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 

它給的NullPointerException在線路具有getContentResolver()。查詢()

我錯過了什麼?或者是不可能在方法中使用Cursor cursor = getContentResolver()。query(MediaStore ...)而不是在onCreate()方法?

我敢肯定,AudioPlayerAcitivity.java是沒有問題的,因爲它使用文件類,而不是MediaStore在FileManger.java時工作。

+0

後從logcat的一個完整的堆棧跟蹤 – Karakuri 2014-09-30 02:52:27

回答

1

getContentResolver()需要用適當的上下文來調用。

而不是從活動擴展文件管理的,只是通過在從調用活動(AudioPlayerActivity.java)的情況下,那麼你可以使用上下文中Cursor cursor = context.getContentResolver()...

相關問題