14 HAZİRAN 2011, Salı
android.os.NetworkOnMainThreadException
Kod aşağıda RssReader için Android projemi çalıştırırken bir hata var.
URL url = new URL(urlToRssFeed);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader xmlreader = parser.getXMLReader();
RssHandler theRSSHandler = new RssHandler();
xmlreader.setContentHandler(theRSSHandler);
InputSource is = new InputSource(url.openStream());
xmlreader.parse(is);
return theRSSHandler.getFeed();
Ve bir hata gösterir:
android.os.NetworkOnMainThreadException
Bu sorunu nasıl düzeltebilirim?
CEVAP
14 HAZİRAN 2011, Salı
Bu durum, uygulamanın ana iş parçacığı üzerinde bir ağ iletişimi işlemi gerçekleştirmek için çalıştığında atılır. AsyncTask
kodunuzu çalıştırın:
class RetrieveFeedTask extends AsyncTask<String, Void, RSSFeed> {
private Exception exception;
protected RSSFeed doInBackground(String... urls) {
try {
URL url= new URL(urls[0]);
SAXParserFactory factory =SAXParserFactory.newInstance();
SAXParser parser=factory.newSAXParser();
XMLReader xmlreader=parser.getXMLReader();
RssHandler theRSSHandler=new RssHandler();
xmlreader.setContentHandler(theRSSHandler);
InputSource is=new InputSource(url.openStream());
xmlreader.parse(is);
return theRSSHandler.getFeed();
} catch (Exception e) {
this.exception = e;
return null;
}
}
protected void onPostExecute(RSSFeed feed) {
// TODO: check this.exception
// TODO: do something with the feed
}
}
Nasıl bu görevi yürütmek için: Mainactivity.java dosya içinde oncreate içinde bu satırı ekleyin() yöntemi
new RetrieveFeedTask().execute(urlToRssFeed);
AndroidManifest.xml
dosyasına bu eklemeyi unutmayın:
<uses-permission android:name="android.permission.INTERNET"/>
Bunu Paylaş:
Px, dp, arasındaki fark ve Android dip...
Doğru kullanımı Android kullanıcısı Yö...
Yakın/Android Klavyeyi gizlemek...
"sertifika süresi dolmuş hata Ayı...
Tasarruf Faaliyeti Android devlet...