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

NetworkOnMainThreadException خطای چیه ؟

JSONObject  12 سال پیش  11 سال پیش
+3 0

سلام

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

NetworkOnMainThreadException

Network  On  Main  Thread  Exception

 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
Spirit  12 سال پیش
+2 0

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

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

سلام

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 سال پیش
+1 0

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

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

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

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

پاسخ به سوال 
حامد  11 سال پیش
+6 0

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

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

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