Android - DownloadManager NullPointerException



我正在尝试在当前的Android项目中实现DownloadManager,以从URL下载mp3。我使用的Android SDK版本是2.3.3。下载是通过单击按钮开始的。从那里将一个字符串传递给 downloadPodcast 方法以开始下载。我遇到的问题是我在尝试开始下载时遇到空指针异常。我已经运行了调试器并验证了 URL 字符串是否已正确传递给此方法并包含有效的字符串值。失败的特定行是:

downloadId= dm.enqueue(new DownloadManager.Request(Uri.parse(podcastUrl))

调试后,我相信我已经将其缩小到"dm"。即使在我认为是在onCreate方法中正确初始化它之后,该项目的值也始终为"null"。我已经浏览了几个示例,并相信我正在正确实现这一点,我只是处于死胡同,不确定为什么这仍然是空的。

主要活动代码:

public class Podcasts extends ListActivity{
private DownloadManager dm;
private long downloadId=-1L;
@Override
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.podcasts); 
    dm = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
    registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

下载方式:

public void downloadPodcast (String podcastUrl){

    Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).mkdir();

    downloadId= dm.enqueue(new DownloadManager.Request(Uri.parse(podcastUrl))
        .setAllowedOverRoaming(false)
        .setAllowedNetworkTypes(Request.NETWORK_MOBILE | Request.NETWORK_WIFI)
        .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "test.mp3")
        .setTitle("TEST"));

}

添加了日志猫:

FATAL EXCEPTION: main
java.lang.NullPointerException
at tv.undignified.android.Podcasts.downloadPodcast(Podcasts.java:275)
at tv.undignified.android.Podcasts$CustomAdapter$2.onClick(Podcasts.java:218)
at android.view.View.performClick(View.java:2485)
at android.view.View$PerformClick.run(View.java:9080)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)

想通了问题。我正在为我的活动初始化 onCreate 中的 DownloadManager,但尝试通过此活动中的类访问它,该类正在创建我的主要活动的新实例,其中 DownloadManager 从未初始化过。

为了解决这个问题,我为我的下载 URL 创建了一个 setter 和 getter 方法,并将其从我的活动中的类传递回我的主活动,然后调用启动下载管理器的方法。

相关内容

  • 没有找到相关文章

最新更新