2011-05-15 63 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