Android - DownloadManager NullPointerException
Я пытаюсь внедрить DownloadManager в мой текущий проект Android, чтобы загрузить mp3 с URL. Я использую версию Android SDK 2.3.3. Загрузка начинается даже нажатием кнопки. Оттуда строка передается в метод downloadPodcast, чтобы начать загрузку. Проблема, с которой я столкнулся, заключается в том, что я получаю исключение нулевого указателя при попытке начать загрузку. Я пробежал через отладчик и убедился, что строка URL правильно передана этому методу и содержит допустимое строковое значение. Конкретная строка, которая терпит неудачу:
downloadId= dm.enqueue(new DownloadManager.Request(Uri.parse(podcastUrl))
После отладки я считаю, что сузил его до "дм". Значение этого элемента всегда равно "нулю" даже после того, как я считаю, правильно инициализировать его в методе onCreate. Я просмотрел несколько примеров и считаю, что реализую это правильно, я просто в тупике и не уверен, почему это все еще ноль.
Основной код деятельности:
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)
1 ответ
Разобрался с проблемой. Я инициализировал DownloadManager в моем onCreate для своей Деятельности, но пытался получить к нему доступ через класс в этой Деятельности, который создавал новый экземпляр моей основной деятельности, в которой DownloadManager никогда не инициализировался.
Чтобы решить эту проблему, я создал метод установки и получения для URL-адреса загрузки и передал его обратно в основное занятие из класса в моей деятельности, а затем вызвал метод, запускающий диспетчер загрузки.