بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

NetworkOnMainThreadException خطای چیه ؟

مدیریت گفتگو
JSONObject 12 سال پیش
آخرین تغییر: 11 سال پیش

سلام

دوستان این خطای چیه ؟

NetworkOnMainThreadException

Network  On  Main  Thread  Exception

نظرات

پاسخ‌ها 5

Spirit 12 سال پیش

شما داری توی ترد اصلی برنامه از اتصالات شبکه مثل اینترنت استفاده می کنی که طبق مستندات ممنوع هستش ، اون قسمت رو توی یه ترد جدا انجام بدید یا میتونید از asyncTask استفاده کنید.

نظرات

Criss 11 سال پیش
اسپریت جان ؟ این دقیقا مثل زمانی میمونه که ما داریم یک عنصر روی UI رو از درون ترد مقدار دهی میکنیم ؟ درسته ؟ که میگه باید توسط ترد Main انجام بشه ؟ یا برعکسه ؟
Spirit 11 سال پیش
یکی میگه اینجا انجام نده (اتصال به اینترنت رو) اویکی هم میگه اینجا انجام نده (تغییر UI رو) ، دیگه نمیدونم برعکس میشه یا نه D:
CreativeBoy 12 سال پیش

سلام

NetworkOnMainThreadException :

این خطا یک خطای runTime هست که البته من یه چیزو اینجا بگم درباره استفاده از کلمه خطا (Error):

بهتره که توی علم برنامه نویسی به این جور خطاها بگیم Exception چرا؟

به عنوان مثال (تو گوگل سرچ زدم و یه مثال کاربردی پیدا کردم):

شما فرض کن فلشتو زدی به لپتاپت داری فایل انتقال میدی بعد یکی میخواد اذیتت کنه میاد فلشو میکشه، خوب اینو اگه بسط بدیم به علم برنامه نویسی میشه همین موردی که شما گفتی برنامه میخواد وصل بشه به اینترنت، نمیتونه، یا این که وصل هست ولی یوهو قطع میشه، خوب اینجا اشکال از عملکرد برنامه نبوده و میشه گفت که یه عامل خارجی این اشکال رو بوجود اورده و مشکل از داخل برنامه نبوده به این میگن Exception 

حالا فرض کن که برنامه داره کار میکنه (مثلا برنامه ماشین حساب) جواب هم میده ولی جواب درستی نمیده که این میشه BUG یا همون کلمه error ی که بعضی از برنامه نویسا این کلمه رو معادل با bug میدونن و میگن برنامه bug\Error داره.

اگه این مطالب رو میدونستید و من تکرار کردم ببخشید من فقط میخوام چیزایی که بلد هستم رو به بقیه هم بگم :)

ادامه بحث اصلی:

NetworkOnMainThreadException یک Runtime Exception هست و زمانی رخ میده که Thread اصلی برنامه میخواد به اینترنت وصل بشه.در اکثر مواقع برای Catch کردن این Exception از StrictMode Policies استفاده میشه که این خودش دو نوع داره:

Thread Policy.

VM(Virtual Machine) policy.

حالا برای این Exception ی که شما گفتی از Thread Policy استفاده میشه و برای این که روش استفاده و توضیحات کامل رو ببینید به لینک زیر برید:

What is StrictMode in Android

این لینک هم بد نیست

یک نکته قابل توجه درباره StrictMode این هست که برای استفاده باید ورژن اندروید 9 به بالا باشه.

راه حل دیگه واسه برطرف کردن این مشکل استفاده از service ها یا Async Task هاست

موفق باشید

نظرات

JSONObject 12 سال پیش

مرسی ، مشکل همون Thread بود حل شد

ولی خود استاد تو پروژه ی Note اصلا Thread نذاشته بود 

چطور اون بدون Thread کار کرد ؟

نظرات

arman 12 سال پیش
دقیقا این سوال برا من هم پیش اومده.کسی میدونه چرا؟
مجتبی یگانه 12 سال پیش
احتمالا ساختار کلاس هایی که استاد تعریف کردند با ساختار شما فرق داره ، به Extends شدن ها توجه کنید ، یا کلا کلاس های والد و فرزند ، وگرنه موضوع قطعا این نیست که Java با شما شوخی داره و بعضی وقتها بخواد سر به سرتون بزاره !
arman 12 سال پیش
من حتی سورس آمادهکه از سایت گرفتمو ،import کردم ،بازم همین ایرادو گرفت
Pr0gramm3r 12 سال پیش
استاد کلا یه چیز دیگست :D
Alireza_Ghamkhar 11 سال پیش
کسی نمیدونه چجوری این مشکلو میشه تو note حل کرد. نگید Async Task و ترد که میدونم فقط نمیدونم کجای کد باید بزنم...
مجتبی یگانه 11 سال پیش
شما یه ترد بسازید ، کد مربوط به اتصال به وبسرویس رو بزارید تو Runnable تردتون و کار تمومه :)
Alireza_Ghamkhar 11 سال پیش
والله این کار رو در متد readURl زدم اما خوب اجازه نمیده ظاهرا... ضمنا خدا خیرتون بده که بین این همه آدم دارید جواب میدید...
مجتبی یگانه 11 سال پیش
اصولا باید حل بشه ! ، ولی اگر مشکل داره تو سوال جدیدی مطرح کنید ، سورس کد درج کنید برسی کنیم :)
علی 11 سال پیش
بچه ها سلام من طبق کد های بالا عمل کردم ولی این params ارور داره . از چیه؟
parsik6 11 سال پیش
دلیل اینکه برای استاد ارور نداد به خاطر اینکه استاد از اندروید 2.2 استفاده کرده . از اندروید 3 به بالا حساسیت اندروید به ترد اصلی بیشتر شده و برای همین این ارور در اندریود های 3 به بالا مشاهده می شه .
علی 11 سال پیش

نظرات

حامد 11 سال پیش

میتوانید در  اول کلاس خودتون این کد را قرار دهید تا مشکل حل شود.

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

نظرات


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