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-адреса загрузки и передал его обратно в основное занятие из класса в моей деятельности, а затем вызвал метод, запускающий диспетчер загрузки.

Другие вопросы по тегам