gpt4 book ai didi

java - 在 Android 中调用具有 getContentResolver().query 的方法时的 NPE

转载 作者:行者123 更新时间:2023-12-01 12:28:51 28 4
gpt4 key购买 nike

从 Android 中的另一个 Activity 调用 getPlaylist() 方法时出现 NullPointerException。该方法应该获取音频信息,然后使用 Cursorcursor = getContentResolver().query(MediaStore...)

返回它

这是详细信息。

我正在使用两个 Activity (AudioPlayerActivity、FileManager)开发自定义音频播放器。AudioPlayerActivity 使用 FileManager** 获取音频文件列表,然后播放它们。

以下是其中的 fragment 。以下是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 将详细信息(如 MP3 ID 标签)存储在 ArrayList 中。

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

它在具有 getContentResolver().query() 的行给出 NullPointerException

我错过了什么?或者是否无法在方法中而不是在 onCreate() 方法中使用 Cursorcursor = getContentResolver().query(MediaStore...) ?

我很确定 AudioPlayerAcitivity.java 不是问题,因为在 FileManger.java 中使用 File 类而不是 MediaStore 时它可以工作。

最佳答案

getContentResolver() 需要在适当的上下文中调用。

无需从 Activity 扩展 FileManager,只需从调用 Activity (AudioPlayerActivity.java) 传入上下文,然后您就可以在 Cursor 光标 = context.getContentResolver()... 中使用该上下文...

关于java - 在 Android 中调用具有 getContentResolver().query 的方法时的 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26111943/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com