現在のAndroidプロジェクトにDownloadManagerを実装して、URLからmp3をダウンロードしようとしています。私が使用しているAndroidSDKのバージョンは2.3.3です。ボタンをクリックするだけでダウンロードが開始されます。そこから文字列がdownloadPodcastメソッドに渡され、ダウンロードが開始されます。私が遭遇した問題は、ダウンロードを開始しようとするとnullポインター例外が発生することです。デバッガーを実行し、URL文字列がこのメソッドに適切に渡され、有効な文字列値が含まれていることを確認しました。失敗している特定の行は次のとおりです。
downloadId= dm.enqueue(new DownloadManager.Request(Uri.parse(podcastUrl))
デバッグした後、私はそれを「dm」に絞り込んだと思います。このアイテムの値は、onCreateメソッドで適切に初期化した後でも、常に「null」です。私はいくつかの例を調べて、これを適切に実装していると信じています。私は行き止まりになっていて、なぜこれがまだ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)