0

現在の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)
4

1 に答える 1

3

問題を解決しました。アクティビティの onCreate で DownloadManager を初期化していましたが、DownloadManager が初期化されていないメイン アクティビティの新しいインスタンスを作成していたこのアクティビティ内のクラスを介してアクセスしようとしました。

この問題を解決するために、ダウンロード URL のセッター メソッドとゲッター メソッドを作成し、それをアクティビティ内のクラスからメイン アクティビティに戻し、ダウンロード マネージャーを開始するメソッドを呼び出しました。

于 2012-08-10T02:05:41.507 に答える