这个类导致我android.os.NetworkOnMainThreadException,我知道我必须使用asyncTask来制作它,但我无法弄清楚如何因为我使用1个片段而这使得我的应用程序非常慢,特别是当我提交位图时,任何人都可以帮助我。
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 :(得分:0)
如果您使用AsyncTask
,请确保在getFeeds
回调中调用doInBackground(...)
答案 1 :(得分: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");
执行方法可以(String... params)
,因此您可以传递一个URL,并在doInBackground(String... params)
@Override
protected Boolean doInBackground(String... params)
{
//Implement your parser here
String urlToParse = params[0];
}
祝你好运。