我正在尝试在我当前的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"));
}
添加了Logcat:
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)
答案 0 :(得分:1)
解决问题。我正在我的onCreate for my Activity中初始化DownloadManager,但试图通过此Activity中的一个类来访问它,该类正在创建我的主要活动的新实例,其中DownloadManager从未初始化。
要解决此问题,我为下载URL创建了一个setter和getter方法,并将其从我的活动中的类传递回我的主要活动,然后调用启动下载管理器的方法。