2012-10-16 95 views
0

此類導致我android.os.NetworkOnMainThreadException,我知道我必須使用asyncTask來使它,但我不知道如何,因爲我使用1片段,這使我的應用程序非常慢,特別是當我點播位圖時,任何人都可以幫助我。android.os.NetworkOnMainThreadException Sax解析

public class ContainerData {  

static public Context context; 

public ContainerData() { 

} 


public static ArrayList<Feed> getFeeds(String feedurl){ 
    SAXParserFactory fabrique = SAXParserFactory.newInstance(); 
    SAXParser parseur = null; 
    ArrayList<Feed> feeds = null; 
    try { 
     parseur = fabrique.newSAXParser(); 
    } catch (ParserConfigurationException e) { 
     e.printStackTrace(); 
    } catch (SAXException e) { 
     e.printStackTrace(); 
    } 
    URL url = null; 
    try { 
     url = new URL(feedurl); 
    } catch (MalformedURLException e1) { 
     e1.printStackTrace(); 
    } 

    DefaultHandler handler = new ParserXMLHandler(); 
    try { 
     parseur.parse(url.openConnection().getInputStream(), handler); 

     feeds = ((ParserXMLHandler) handler).getData(); 
    } catch (SAXException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return feeds; 
} 

} 

回答

0

如果使用AsyncTask確保getFeeds被稱爲doInBackground(...)回調

+0

你能幫助我的代碼嗎? –

+0

@ user1664332這是一個[很好的簡短示例](http://www.vogella.com/articles/AndroidPerformance/article.html#asynctask)。 請注意,啓動AsyncTask的是在'android:onClick =「readWebpage」'佈局xml中標記的方法'readWebpage(View view)'' – eladr

0

不管你是否使用片段或者不裏面,你還在試圖在主線程上執行網絡活動。

創建一個擴展AsyncTask的泛型類,它可以執行所有的解析。

public class MyTaskHandler extends AsyncTask<String, Integer, Boolean> 
{ 

@Override 
protected void onPreExecute() 
{ 
    //Could display progress dialog here 
} 

@Override 
protected Boolean doInBackground(String... params) 
{ 
    //Implement your parser here 
} 

@Override 
protected void onPostExecute(Boolean result) 
{ 
    //Check result, dismiss dialog etc 
} 
} 

然後創建的MyTaskHandler一個新的實例並運行它...

MyTaskHandler myTask = new MyTaskHandler(); 
myTask.execute("http://www.myxmlsite.com/lists.xml"); 

execute方法可以採取(String... params)這樣你就可以通過例如URL,並在doInBackground(String... params)

檢索
@Override 
protected Boolean doInBackground(String... params) 
{ 
    //Implement your parser here 
    String urlToParse = params[0]; 
} 

祝你好運。