NPE при вызове метода с getContentResolver().query в Android

NullPointerException при вызове метода getPlaylist() из другого действия в Android. Предполагается, что метод получает информацию об аудио, а затем возвращает ее с помощью Cursor cursor = getContentResolver().query(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);

а следующий — FileManager.java, который считывает все аудиофайлы и сохраняет подробности (например, теги MP3 ID) в ArrayList с помощью MediaStore API.

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

Логкат

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().query().

Что мне не хватает? или невозможно использовать курсор Cursor = getContentResolver().query(MediaStore...) в методе вместо метода onCreate()?

Я почти уверен, что AudioPlayerAcitivity.java не является проблемой, поскольку он работает при использовании класса File вместо MediaStore в FileManger.java.


person HUKS    schedule 30.09.2014    source источник
comment
опубликовать полную трассировку стека из logcat   -  person Karakuri    schedule 30.09.2014


Ответы (1)


getContentResolver() необходимо вызывать в правильном контексте.

Вместо расширения FileManager из Activity просто передайте контекст из вызывающего действия (AudioPlayerActivity.java), после чего вы сможете использовать контекст в Cursor cursor = context.getContentResolver()...

person ashoke    schedule 30.09.2014