2011-05-15 98 views
1

我的應用程序在所有版本的Android中都能正常工作,除非它正在失敗,因爲我正在主線程上進行網絡調用。我的代碼如下url.openStream()失敗,我想我需要在一個單獨的線程上進行此調用。另外,我創建了這個類Utilities,所以我可以引用在我的應用程序的許多部分中使用的函數。我確信我錯了,但那是當時我所知道的。我希望有人願意花時間向我展示我應該如何做到這一點,以及如何將openStream呼叫包裝在AsyncTask中。在此先感謝您的幫助。另外,我花了幾天時間試圖自己弄清楚。使用AsyncTask的Android幫助

class Utilities { 
    static XMLReader xr; 
    static URL url; 
    private final static int CHUNK_SIZE = 32 * 1024; 
    static byte[] _fileIOBuffer = new byte[CHUNK_SIZE]; 

static String DBGetOnlineVersionNumber(final Activity activity){ 

    final String version = null; 

    try { 

     /* Create a URL we want to load some xml-data from. */ 
     String location = activity.getString(R.string.version_file_location); 
     url = new URL(location); 

     /* Get a SAXParser from the SAXPArserFactory. */ 
     SAXParserFactory spf = SAXParserFactory.newInstance(); 
     SAXParser sp = spf.newSAXParser(); 

     /* Get the XMLReader of the SAXParser we created. */ 
     xr = sp.getXMLReader(); 
     /* Create a new ContentHandler and apply it to the XML-Reader*/ 
     final XMLVersionReader myExampleHandler = new XMLVersionReader(); 
     xr.setContentHandler(myExampleHandler); 

     xr.parse(new InputSource(url.openStream())); //Fails here 
     /* Parsing has finished. */ 
    } catch (Exception e) { 
     System.out.println("XML Pasing Excpetion = " + e); 
    } 
    return version; 
} 
+0

當你真正想要的是一個字符串時,傳遞Activity引用是一個壞主意。 – dmon 2011-05-15 01:03:57

回答

1

現在你已經很好地把你的代碼在一個單獨的靜態方法我猜它更適合用它代替。讓你可以同步調用它,或者可以從單獨的線程中調用相同的代碼。如果將此調用添加到您的活動中,則可將調用包裝到AsyncTask中。

new AsyncTask<Activity, Void, String>() { 
    @Override 
    public String doInBackground(Activity... activities) { 
     return Utilities.DBGetOnlineVersionNumber(activities[0]); 
    } 
    @Override 
    public void onPostExecute(String result) { 
     Log.d("VERSION_NUMBER", result); 
    } 
}.execute(this); 
+0

生病讓這一槍,讓你知道。感謝您及時的回覆。 – 2011-05-15 00:24:17

+0

不能承諾這可以解決您在Honeycomb上的問題。但這是我經常做的事情,編寫同步方法,並且如果需要,可以從單獨的線程中調用它們。 – harism 2011-05-15 00:27:17

+0

工程很棒。非常感謝您的幫助和快速響應。 – 2011-05-15 05:33:51