2012-09-19 24 views
7

DownloadManagerは、不安定なモバイルインターネット接続で多くのバックグラウンドダウンロードがあるアプリにとって適切な選択肢です。ウェブ上で発見チュートリアルのコードを使用してAndroid DownloadManager:ダウンロードは失敗しますが、COLUMN_REASONは「プレースホルダー」のみを返します

、アプリはそのようなシステムのDMからダウンロードを要求することができる:そのコードで

// in onCreate() 
dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 

// in requestData() 
Uri u = Uri.parse("http://server:8000/feed/data"); 
Request dreq = new Request(u); 
dreq.setNotificationVisibility(Request.VISIBILITY_HIDDEN); 
downloadID = dm.enqueue(dreq); 

URLは、ローカルコンピュータ上のテストサーバーです。 URLが正常に機能すると、Androidエミュレータのブラウザがページを取得することができ、アプリケーションがDownloadManager経由でそのページを要求すると、サーバはHTTPコード200を返します。

これは、DMがファイルを取得したときに呼び出されるACTION_DOWNLOAD_COMPLETE BroadcastReceiverの関連するコードです。

Query q = new Query(); 
q.setFilterById(downloadID); 
Log.i("handleData()", "Handling data"); 
Cursor c = dm.query(q); 
if (c.moveToFirst()) { 
    Log.i("handleData()", "Download ID: " + downloadID + "/" + c.getInt(c.getColumnIndex(DownloadManager.COLUMN_ID))); 
    Log.i("handleData()", "Download Status: " + c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS))); 
    if (c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) { 
    String uriString = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); 
    Log.i("handleData()", "Download URI: " + uriString); 
    } else if (c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_FAILED) { 
    Log.i("handleData()", "Reason: " + c.getString(c.getColumnIndex(DownloadManager.COLUMN_REASON))); 
    } 
} 

奇妙な結果はこれです:

DOWNLOAD_STATUS 16(又はSTATUS_FAILED)であるが、その理由は、 "プレースホルダ" です。

なぜですか?サーバーが200のステータスコードを返すと、なぜ失敗しますか?なぜDownloadManagerによって理由が与えられないのですか?

答えて

14

ここに回答してください。

問題点:COLUMN_REASONは文字列ではなく数値です。

Log.i("handleData()", "Reason: " + c.getInt(c.getColumnIndex(DownloadManager.COLUMN_REASON))); 

実際に動作するエラーコードが返されます。

+0

私は何の理由が何であるかを知ることができます – Nick

+1

[DownloadManager API doc](http://developer.android.com/reference/android/app/DownloadManager.html)にいくつかの値がリストされています - そのページの「COLUMN_REASONの値」を選択します。 – hez

関連する問題