احمد صوالحة نشر 3 مارس 2021 أرسل تقرير نشر 3 مارس 2021 لدي تطبيق يقوم بعرض RSS Feed من موقع معين، يظهر لي الخطأ التالي عند تشغيل التطبيق: android.os.NetworkOnMainThreadException هذا هو الكود التي تحصل فيه المشكلة: 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(); 1 اقتباس
0 Wael Aljamal نشر 3 مارس 2021 أرسل تقرير نشر 3 مارس 2021 مشكلة تتعلق بالاتصال بالانترنت من MainThread (هي مسلك مسؤول عن الواجهة الرسومية ولا يجب الاعتماد عليه بتنفيذ أي شيى آخر ليكون الأداء جيد ولا يحدث توقف في عمل البرنامج) أولا يجب التأكد من إعطاء سماحية الوصول للانترنت في AndroidMainfest: <uses-permission android:name="android.permission.INTERNET"/> وضمن MainActivity.java يجب إضافة التالي للدالة OnCreate : ليتم تنفيذ المهمة التي سوف نكتبها الحقا: new RetrieveFeedTask().execute(urlToRssFeed); سنقوم بتنفيذ المهمة في مسلك منفضل / سوف نعمل على التوازي/ كالتالي: حيث قمنا بتعريف RetrieveFeedTask كـ AsyncTask. 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; } finally { is.close(); } } protected void onPostExecute(RSSFeed feed) { // TODO: check this.exception // TODO: do something with the feed } } في Android الإصدار API 30 تم التخلي عن AsyncTask فعلينا عندها استخدام تعريف المسلك Threads كالتلي: Thread thread = new Thread(new Runnable() { @Override public void run() { try { //Your code goes here // هنا نكتب الدالة السابقة } catch (Exception e) { e.printStackTrace(); } } }); thread.start(); 1 اقتباس
السؤال
احمد صوالحة
لدي تطبيق يقوم بعرض RSS Feed من موقع معين، يظهر لي الخطأ التالي عند تشغيل التطبيق:
android.os.NetworkOnMainThreadException
هذا هو الكود التي تحصل فيه المشكلة:
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.