2012-09-19 10 views
7

देता है डाउनलोड मैनेजर एक ऐप के लिए सही विकल्प प्रतीत होता है जिसमें फ्लैकी मोबाइल इंटरनेट कनेक्शन पर बहुत सारे पृष्ठभूमि डाउनलोड होते हैं।एंड्रॉइड डाउनलोड मैनेजर: डाउनलोड विफल रहता है, लेकिन COLUMN_REASON केवल "प्लेसहोल्डर"

वेब पर पाया ट्यूटोरियल कोड का उपयोग करना, एप्लिकेशन तो जैसे सिस्टम के डीएम से एक डाउनलोड का अनुरोध करने में सक्षम है:

// 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 एक स्थानीय कंप्यूटर पर एक परीक्षण सर्वर है। यूआरएल काम करता है, एंड्रॉइड एमुलेटर में ब्राउजर पेज को पुनर्प्राप्त कर सकता है और सर्वर HTTP कोड 200 लौटाता है जब मेरा ऐप डाउनलोड मैनेजर और उपरोक्त उद्धृत कोड के माध्यम से उस पृष्ठ का अनुरोध करता है।

यह ACTION_DOWNLOAD_COMPLETE ब्रॉडकास्ट रिसीवर में प्रासंगिक कोड है जिसे डीएम ने फ़ाइल पुनर्प्राप्त करने पर बुलाया जाता है।

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

क्या है [डाउनलोड मैनेजर एपीआई दस्तावेज़] में सूचीबद्ध कई संभावित मान हैं (http://developer.android.com/reference/android/app/DownloadManager.html) - " उस पृष्ठ पर COLUMN_REASON का मान "। – hez

संबंधित मुद्दे