NetworkOnMainThreadException خطای چیه ؟
شما داری توی ترد اصلی برنامه از اتصالات شبکه مثل اینترنت استفاده می کنی که طبق مستندات ممنوع هستش ، اون قسمت رو توی یه ترد جدا انجام بدید یا میتونید از asyncTask استفاده کنید.
سلام
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 استفاده میشه و برای این که روش استفاده و توضیحات کامل رو ببینید به لینک زیر برید:
یک نکته قابل توجه درباره StrictMode این هست که برای استفاده باید ورژن اندروید 9 به بالا باشه.
راه حل دیگه واسه برطرف کردن این مشکل استفاده از service ها یا Async Task هاست
موفق باشید
مرسی ، مشکل همون Thread بود حل شد
ولی خود استاد تو پروژه ی Note اصلا Thread نذاشته بود
چطور اون بدون Thread کار کرد ؟
میتوانید در اول کلاس خودتون این کد را قرار دهید تا مشکل حل شود.
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
