آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

RssReader (حل شده)

Hajhosseini  11 سال پیش  11 سال پیش
+1 0

با توجه به این که در اندروید بالاتر از 4 نمیشه توی MainThread از اتصالات شبکه استفاده کرد پروژه RssReader ی که استاد زحمت کشیدن و آموزش دادن دچار خطا میشه. چند راه حل وجود داره که من یکیشو با کد میگم و یکی رو هم اساتید لطف کنن و باهم مشکلش رو حل کنیم.

راه حل اول: 
توی اکتیویتی کد های زیر رو بنویسیم:

 int SDK_INT = android.os.Build.VERSION.SDK_INT;
if (SDK_INT > 8)
{
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThrea
}

روش دوم:
استفاده از AsyncTask:

من این روش رو تست کردم ولی همچنان مشکل وجود داره و اررور همون اررور قبلیه: 

 android.os.NetworkOnMainThreadException

روش اول یک راه حل موقت هست و پیشنهاد میکنم کسی استفاده نکنه ولی برای تست صحیح بودن عملکرد RssReader کاربرد داره.
نمونه کد روش دوم:

 @Override
    protected RssParser doInBackground(String... params) {
        try {
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser sp = spf.newSAXParser();
            XMLReader xr = sp.getXMLReader();
            URL sourceUrl = new URL(url);
            rssHandler = new RssHandler();
            xr.setContentHandler(rssHandler);
            xr.parse(new InputSource(sourceUrl.openStream()));
        }
        catch (ParserConfigurationException e) {
            e.printStackTrace();
        }
        catch (SAXException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return this;
    }

این روش باید درست کار کنه ولی متاستفانه اینطور نیست، اساتید کسی راه حل دیگه ای داره؟

0 0
کلا یه ترد جدا بسازید برای ارتباط با سرور و خوندن اطلاعات و همه کار هاتون رو اونتو انجام بدید . هم توی نسخه 4 به بالا کار میکنه هم در نسخه های قدیمی اندروید . (11 سال پیش)
0 0
کار نمیکنه محمد حسین جان، تست کردم (11 سال پیش)
0 0
ببیند استفاده از ترد هیچ فرقی نمیکنه چه در نسخه اندروید قدیمی باشه چه در جدید ربطی به ترد نداره . (11 سال پیش)
0 0
مستندات گوگل رو مطالعه کنید، تفاوت های زیادی هست. (11 سال پیش)
0 0
همون روش دوم که گفته بودم درسته فقط اگر از یک لیستنر استفاده کنید درست میشه. (11 سال پیش)
0 0
خب ، طبیعتا شما باید از لیسنر استفاده کنید ، چون توی ترد ما نمیتونیم خروجی رو مستقیم بر گردون کنیم و نیاز به لیسنر هست . (11 سال پیش)
0 0
دوست عزیز چی جوری حلش کردی ؟ لطفا کدت رو قرار بده که دوستان دیگه هم بتونن استفاده کنن با تشکر. (11 سال پیش)
+1 0
شما یوزر معمولی هستی شهریار جان، حتی اگر من نمونه کد هام رو در پاسخ درج کنم نمیتونی ببینی! پروژه مال شرکته و نمیتونم سورس قرار بدم ولی وقتم که آزاد شد یک Helper براش مینویسم و قرار میدم. (11 سال پیش)
0 0
من کاربر ویژه ام ؟میتونم ببینم!! مرسی. (11 سال پیش)
 برای این سوال پاسخی وجود ندارد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .