دوره مجازی اندروید (جلسه 13): آموزش Json و دریافت اطلاعات از سرور با Volley



visibility  
mode_comment   ۶۳

به نام خدا، دوستان سلام. توی این جلسه با ساختار داده Json آشنا می شویم. Json یک ساختار برای تبادل و ذخیره سازی اطلاعات هست که امروزه بیشنر وب سایت های معتبر برای Api سرویس خود، از این ساختار استفاده می کنند. در این جلسه همچنین به کار با کتابخانه ی Volley را آموزش خواهیم داد.

به دلیل مهم بودن این بخش 2 مثال کاملا متفاوت حل خواهیم کرد، یک مثال مربوط به ساختن یک اپ آب و هوا خواهد بود که اطلاعات آب و هوای کنونی شهر خاصی را نمایش خواهد داد. و در مثال بعدی قسمت هایی که در جلسه ی مربوط به RecyclerView طراحی کردیم را با استفاده از اطلاعات سرور پیاده سازی خواهیم کرد.

مطالب مطرح شده در این جلسه عبارتند از :

  • JSON چیست؟
    • Json Object
    • Json Array
    • Json key
    • Json value
    • ایجاد JsonObject
  • دریافت اطلاعات از وب سایت و سرور راه دور با کتابخانه گوگل (Volley)
  • Volley چیست؟
    • JsonObjectRequest
    • JsonArrayRequest
    • RequestQueue چیست؟
    • آموزش اضافه کردن Request به RequestQueue
    • RetryPolicy چیست؟
    • ست کردن RetryPolicy روی Request
info توجه

این مطلب یک جلسه از آموزش برنامه نویسی اندروید می باشد و برای مشاهده آن باید در دوره ثبت نام کنید.

ثبت نام در آموزش برنامه نویسی اندروید

comment دیدگاه کاربران
Mr abbas replyپاسخ

😛 آخ جون سمت سرور

ح حسین replyپاسخ

سلام
1) آیا از برنامه ای که جیسون بدهد یا xml میتونیم استفاده کنیم ؟ حتی asp.net یا java یا هر زبان سرور ساید دیگر ؟
2 مهم ) فرض کنید برنامه ای مثل بازار ، برای ورود در نیاز به یوزر و پاس دارد . سوالی که ذهن منو گرفته اینه تصدیق هویت برنامه بازار بر اساس فرم است (با سشن و کوکی ) حالا ما اگر بخواهیم برای برنامه تحت وب یک برنامه اندرویدی بنویسیم و از طریق وب تصدیق هویت صورت بگیره . برای اکتیویتی های بعدی برنامه چطور متوجه میشه که این کاربر لاگین کرده ؟ و این کوکی و یا سشن رو چطور در برنامه اندروید نگه داریم تا در اکتیویتی های بعدی فقط به یوزرهای لاگین شده اجازه دیدن بدیم ؟ (لطفا تا جایی که ممکنه کامل پاسخ بدین )
3) لطفا در مورد REST API وردپرس و نحوه استفاده از اون رو توی اندروید هم بگید چون اول دوره از آقای آوند قول این مورد رو گرفتم .
4)در برنامه ای مثل دیوار که حجم رکوردهای برگشتی خیلی زیاد هست ولی برنامه با سرعت نت کم هم کار میکنه و بطور مثال عکسها lazy loading میشن ، این مورد رو برای لیست چطور پیاده سازی کنم و یا رکوردهای inifite رو چطور در اندروید انجام بدم برای لیستها ؟
5)با استفاده از RequestQueue دیگه نیازی به برنامه نویسی تردینگ نیست ؟ و راحت کار با ui انجام میگیره یا برای کارهای سنگین تر روشهای دیگه ای هم هست ؟
6)برای سرعت برنامه هایی که از سرور اطلاعات میخونن باید چه کارهایی انجام بدیم و بهترین پیشنهادهای شما برای این چه مورادی هستند ؟
ممنونم
لطفا برای هر مورد بطور کامل توضیح بدین و با تشکر از روال خوب تدریس شما .

سعید شاهینی

سلام
جواب سوال 1: بله فرقی ندارد.
جواب سوال 2: با استفاده از Account manager می تونید سرویس عضویت سرور خودتون رو با اپتون sync کنید. برای مثال اپ دیجیکالا رو می تونید مشاهده کنید. وقتی وارد حساب می شوید، حساب کاربری شما در دیجیکالا، داخل حساب های کاربری تنظیمات گوشی قابل مشاهده خواهد بود. البته این روش استانداردترین هست، که به دلیل پیچیدگی هایش خیلی از اپ های ایرانی همچین ویژگی ندارند.
جواب سوال 3: متاسفانه امکانش نیست، به دلیل درخواست های زیاد php خام آموزش داده خواهد شد.
جواب سوال 4: با استفاده از PJPEG (Progressive Jpg)I، می تونید این کار رو انجام بدید، راجع بهش مقاله زیاد هست،
جواب سوال 5: داخل ویدیو های جلسات نکته ای که فرمودید رو پاسخ خواهم داد.

mamad reza replyپاسخ

استاد لطفا اینو به صورت ارتباط با php خام یا از پایه نوشتن توضیح بدید نه به Word press

سعید شاهینی

سلام، بله با php خام آموزش خواهیم داد.

میلاد امامی replyپاسخ

خیلی عالی مهندس دمت گرم 😉
فقط اگه زمان آپلود جلسه بعدی رو بزارید خیلی خوب میشه دگ روزی چند بار مجبور نمیشیم چک کنیم سایتو.

سعید شاهینی

سلام، خیلی ممنون، عذرخواهی می کنم. فردا شب و پس فردا جلسات بعدی منتشر خواهند شد.

ali rahmanian replyپاسخ

سلام
چرا دوره اندروید شده هفته ای یک جلسه ؟؟؟

سعید شاهینی

سلام، فردا شب و پس فردا 2 جلسه منتشر خواهد شد. عذرخواهی می کنم بابت تاخیر

ح حسین replyپاسخ

سلام
درباره سوال 4 پرسش بالا اینطور توضیح دادین :

با استفاده از Account manager می تونید سرویس عضویت سرور خودتون رو با اپتون sync کنید. برای مثال اپ دیجیکالا رو می تونید مشاهده کنید. وقتی وارد حساب می شوید، حساب کاربری شما در دیجیکالا، داخل حساب های کاربری تنظیمات گوشی قابل مشاهده خواهد بود. البته این روش استانداردترین هست، که به دلیل پیچیدگی هایش خیلی از اپ های ایرانی همچین ویژگی ندارند.

1)*مهم*) appهای ایرانی از چه روشی استفاده میکنند و یا انواع روش ممکن چیست و در چه شرایطی باید کدام گزینه رو انتخاب کرد ؟

سعید شاهینی

سلام، استاندارد ترین روش استفاده از account manager هست، اما خودتون می تونید بیاید واطلاعات کاربر رو که گرفتید ذخیره کنید یه جایی، هر موقع که خواستید وارد هر صفحه بشید، اطلاعات کاربر رو چک کنید، ببینید قبلاً لاگین کرده یا نه. این روش یک مشکلی داره:

فرض کنید کاربر از چند دستگاه وارد اکانتش شده، مثلا از وب و یک موبایل دیگه. بعد از وب میاد و پسوردش رو عوض می کنه. این وضعیت جدید به دستگاه های دیگه خبر داده نمی شه، چون اونا یک بار اطلاعات رو گرفتن و دیگه چک نمی کنن. در واقع اطلاعات با سرور sync( همگام سازی) نمی شن. البته می تونید برای sync شدن باز هم خودتون کدنویسی کنید اما این کار زمان بر هست و پیچیدگی های خاص خودش رو داره. اما این مشکلات در روش استفاده از account manager وجود ندارن.

سعید پورپناد replyپاسخ

سلام آقای شاهینی لطفا کمی در اموزش ها برای افراد مبتدی تر آرام تر تدریس کنید تا مطالب شما قابل فهم تر باشد برای مثال درک درس فرگمنت برای من واقعا مشکل بود .باتشکر 12ساله

سعید شاهینی

سلام، باشه حتماً

جعفر پیشدادی replyپاسخ

سلام کاربرد نام شهریا city در کدها برای چه بود …. چون شما درکد api شهر لندن رو پاس دادید وخروجی جیسون هوای لندن بود…بعد نام تهران هم در فراخوانی استفاده کردید

سعید شاهینی

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

مجید زارعی هوشیار replyپاسخ

سلام ….استاد شاهینی این جلسه خیلی عالی بود 😛 😛 …………….نه این که جلسه های قبل بد باشه…..جلسه های قبل هم خوب بودن…..این جلسه گام به گام بود…و حتی دونه به دونه پارامتر هارو که توضیح میدادین مطلب قشنگ جا می افتاد….همین روال رو ادامه بدید 😀 ….دست شما درد نکنه…….خسته نباشید

سعید شاهینی

سلام، خیلی ممنون لطف دارید، حتما

ممم ممم replyپاسخ

سلام استاد شاهینی !
بنده به این مشکل خوردم تمام کانکشن اینترنتم رو هم بررسی کردم ،json رو داخل مرورگر میاره ،ولی داخل برنامه اررور میده!
اینم اررورش:
Unhandled exception java.lang.RuntimeException: Bad URL api.openweathermap.org/data/2.5/weather?q=London&apikey=507497a40e9095c2a54f5a8802465dad
java.lang.RuntimeException: Bad URL api.openweathermap.org/data/2.5/weather?q=London&apikey=507497a40e9095c2a54f5a8802465dad
استاد میشه بگید مشکل از چی میتونه باشه؟
خیلی ممنون از آموزش های خوبتون!

سعید شاهینی

سلام، http:// رو اول url وارد نکردید.

بهنام replyپاسخ

سلام من تو بیلد کردن پروژه به مشکل خوردم سرچ کردم و تو فایل builde.gradle جایگزین کردم jcenter رو با mavenCenteral() مشکل بیلد کردن حل شد ولی این کتابخانه volley رو نمی تونم با پروژه سینک کنم به نظرتون مشکلش بخاطر تغییر jcenter هست ؟

سعید شاهینی

سلام، هم mavenCenteral و هم Jscenter رو داخل Build.gradle اضافه کنید.

سیروان replyپاسخ

سلام
استاد واقعا عصابم خراب شد هر چی میکنم اصلا دانلودنمیشه یه ساعته لودینگ آورده
حتی فیلتر شکن سایفون هم روشنه و سایت های فیلتر شده رو باز میکنه اما این اندرویید استودیو واصعا عصاب خورد کن
تقریبا دو هفتست رویه این مشکل برخوردم و ستوپ کردم ساعت ارسال نظر رو هم ببینید چقدر زحمت میکم لطفا هرچه سریعتر جواب بدهید
مشکل از build.gradle
compile ‘com.android.volley:volley.1.0.0’
—————————————
http://rozup.ir/view/1842891/2.png

سعید شاهینی

سلام، دلیلش این هست که سایفون اصلاً کار نمی کنه داخل اندروید استودیو!!! باید از vpn استفاده کنید، که محل اقامتتون خارج از ایران نشون داده باشه، از سرویس هایی مثل kerio یا cisco استفاده کنید!

سیروان

از سایت https://vpnm.me/ خریدم
http://rozup.ir/view/1848448/1.png
http://rozup.ir/view/1848454/12121.png

مثل سایفون هست سایت های فیلتر شده رو باز میکنه اما واسه اندروید استودیو کار نمیکنه
به غیر از هدر دادن پول هیچ سودی نداشت .
اگه میشود لطفا فیلتر شکن خود را آپلود کنید و واسه من بفرستید تا دانلود کنم و سپس سایتی که از اون خودتان خریدید را به من بگید تا از اون یوزر نیم و پسوردو بخرم

سعید شاهینی

دوست عزیز nextvpn هم همین مشکل رو داره و location تغییر نمی ده، از سرویس های cisco استفاده کنید. با سرورهای آمریکا متصل بشید.

سیروان replyپاسخ

سلام
دقیقا کد های شما رو روی اندروید استودیو کپی کردم و اونو تو گوشیم ذخیره کردم(adbd)ولی اطلاعات اب و هوا رو نمیگیره
اندروید استودیوی من
http://rozup.ir/view/1861821/1.png
ولی تو اندروید استودیو شما اطلاعات رو میگیره
http://rozup.ir/view/1861825/2.png
مشکل از چیست؟؟؟البته شما از جنی موشن استفاده کردید و من از ADBD
البته منcisco VPN رو دانلود کردم و اون VPNروشنه
و دلیل اینکه من از جنی موشن نمیتونم استفاده کنم اینه که وی پی ان کاسیو رو قطع و وصل میکنه در حالی که اندروید استودیو به درستی وی پی ان کار میکنه و اونو قطع و وصل نمیکنه

چکار کنم استاد؟؟

سعید شاهینی

داخل اندروید مونیتور هر اروری به وجود بیاد نشون داده می شه، لطفا از ارورش اسکرین شات بگیرید

سیروان

ارور ها
http://rozup.ir/view/1863095/46.png
http://rozup.ir/view/1863096/7.png
————-
کد های جاوا
http://rozup.ir/view/1863093/s.png
http://rozup.ir/view/1863094/so1.png

سعید شاهینی

permission مربوط به اینترنت رو داخل مانیفست اضافه نکردید، داخل ویدیو آموزش دادم مثل اینکه حواستون نبوده

سیروان

فایل ndkرو دانلود کردم گفتم شاید مشکل از این باشه که ارور ها تغیر پیدا کرد
http://rozup.ir/view/1867390/12111.png
http://rozup.ir/view/1867391/11.png
هنوز نتونستم این مشکلو حل کنم ساعت 5 شبه
این همه تلاش شبانه روز به نتیجه ای نرسیدم
استاد چاره چیست؟؟؟چیکار کنم؟مشکل کار از کجاست؟

سعید شاهینی

سلام، Ndk برای چی دانلود کردید؟! ndk برای نوشتن برنامه با c++ هست!

سیروان

همینطوری دانلود کردم گفتم شاید مشکل از این باشه
استاد نظر دیگه رو تایید نکردید.
نظر قبلیم رفته تو قسمت اسپم ها؟؟؟یعنی سیستم وردپرس نظر قبلی رو اسپم مشخص کرده؟
دیدگاه شما در انتظار بررسی است.

سعید شاهینی

نظر دیگه ای از شما ثبت نشده!

Hamed Noktedan replyپاسخ

سلام
تو این جلسه به جز volley کتابخانه های دیگه ای هم معرفی کردید به نام های retforfit و okayhttp البته نمیدونم اسمشون رو درست نوشتم یا نه
آیا تو جلسات بعدی حرفی از این ها زده شده؟
یه توضیحی از این ها بدید لطفا
ممنون

سعید شاهینی

سلام، بهترین کتابخونه در حال حاضر Volley هست که آموزش دادیم در این دوره، به نظرم احتیاجی به کتابخونه های دیگه نیست

ح حسین replyپاسخ

سلام
توی صفحه زیر volley رو DEPRECATED معرفی کرده !
https://github.com/mcxiaoke/android-volley
حالا باید بجای اون چی استفاده کرد ؟
دلیل DEPRECATED کردن volley چی بوده و کتابخانه جایگزین اون چیه ؟ و چه مزایایی نسبت به volley داره ؟
لطفا توضیح کامل بدین
تشکر

سعید شاهینی

سلام، این کتابخانه ای که شما داخل پیجش بودی مربوط به گوگل نیست، بلکه کپی از volley بوده که دیگه اون کاربر نمی خواد توسعه اش رو ادامه بده

ح حسین

وقت بخیر استاد
لطف میکنید صفحه اصلی volley رو لینک بدین ؟
کتابخانه های این چنینی چه مزیتی نسبت به volley خود گوگل دارند که این همه طرفدار دارند ؟

سعید شاهینی


طرفدار ندارند، قبلا اضافه کردن volley گوگل دردسر داشت، همه از کتابخانه های فرعی استفاده می کردن اما الان دیگه volley به bintray اضافه شده و نیازه به کتابخانه های فرعی نیست

علیرضا رحمانی replyپاسخ

سلام به غیر از سایتی که معرفی کردید سایت دیگه ای رو میشه معرفی کنید که امکان ارسال فایل جیسون رو داشته باشه ؟؟ برای تمرین بیشتر میخوام

سعید شاهینی

منظورتون از امکان ارسال فایل Json چیه؟

امین علیپور replyپاسخ

سلام استاد عزیز . چرا از کتابخانه Retrofit به جای Volley استفاده نکردید؟؟

سعید شاهینی

سلام چون volley بهتره!

امین عظیمی replyپاسخ

سلام استاد. خسته نباشید.
یک سوال برام پیش اومد
تو url شهر به عنوان لندن تعریف شده، ولی شما به تابع GetCurrentWeather تهران رو دادید. نیازی نیست مشخص کنید که تهران با لندن جایگزین بشه؟

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

سعید شاهینی

سلام، چرا! اصلا داخل url باید پارامتر تابع قرار داده بشه، من برای مثال همون لندن گذاشتم توی url باشه.
interface یه قرارداد هستش که می گه هرکس می خواد منو Implement کنه باید این توابع رو پیاده سازی کنه. این ساده ترین تعریف interface هستش.

علی غلامی replyپاسخ

سلام استاد من کتاب خونه volley گرفتم ولی همین اول JasonObjectRequest برام نمیاره خودمم تایپ میکنم error میده 😥

سعید شاهینی

سلام٬ JsonObjectRequest درسته نه jason و نکته دیگه اینکه امکان داره پروژه رو دوباره بیلد نکردید

علی غلامی replyپاسخ

استاد درست شد ممنون

مهدی پاکروان replyپاسخ

سلاممم
واقعا مرسی خیلی دوس داشتم این قسمتو
مرسی استاد من واقعا ازتون ممنونم من از تکنیک AsyncTask استفاده میکردم که خیلی پیچیده و ضعیف بود ولی این عالیه مرسی

غلامرضا محمدی replyپاسخ

سلام استاد عزیز بنده کار با volley رو انجام دادم بدون مشکل ولی شبیه سازی که روی sdk 19 انجام دادم کار ارسال و دریافت انجام نشد ولی روی sdk 20 به بالا درست کار میکنه . من روی شبیه سلز خود اندروید استدیو تست کردم و min sdk:16 و target sdk:26

سعید شاهینی

سلام، ربطی به min sdk نداره چون volley کار می کنه و مشکلی نداره. مشکل از جای دیگه اس، باید مرحله به مرحله دیباگ کنید تا ببینید مشکل کجاس

حامد replyپاسخ

سلام استاد
اگر که بخواهیم از یک CheckBoxAlertDialog اطلاعات رو به سرور ارسال کنیم به چه صورت باید کد نوشته بشه ؟
در واقع برنامه به این شکله که
یک عکس پیش زمینه یک اکتیویتی وجود داره و روی قسمت های محتلف عکس چند باتن قرار داده شده با فشردن هر باتن توسط کاربر CheckBoxAlertDialog
ظاهر میشه ,
اما من چطور آیتم هایی که انتخاب شده از طرف کاربر به سرور ارسال کنم ؟
نکته بعد اینکه برای کمتر شدن حجم برنامه , آرایه String تمام CheckBoxAlertDialog ها را در پوشه Values >> String ایجاد کردم به این دلیل که حدود 200 آیتم هستند
برای ارسال دیتا احتمالا باید همه آرایه ها را داخل اکتویتی ایجاد کنم ! که حجم برنامه بشدت بالا میره
کمک بزرگ و حیاتیِ اگر که راهنمایی بفرمایید و یا معرفی سایتی که بتونه در این مورد خاص کمک کنه
ممنونم

سعید شاهینی

https://stackoverflow.com/questions/16954196/alertdialog-with-checkbox-in-android

محمد واحدی replyپاسخ

استاد سلام خسته نباشید
من کدم رو عین مال شما نوشتم
اما نه کد شما کار میکنه نه کد من
جالبه که نه در Log Info چیزی میاد کلا نه در Log Error
چیکار کنم بنظرتون؟
اینم همه ی کد های منه

package jsonexample.first.hamlo.jsonexample;

import android.app.VoiceInteractor;
import android.net.sip.SipSession;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONObject;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button request_btn=(Button)findViewById(R.id.send_request_btn);
        request_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getCurrentWeather("Tehran");
            }
        });
    }

    private void getCurrentWeather(String cityName){
        JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET,
                "http://api.openweathermap.org/data/2.5/weather?q=London&apikey=d061e86842ea73ef089e3d9dab9a144f",
                null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.i(TAG, "onResponse: "+response.toString());
            }
        },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.e(TAG, "onErrorResponse: "+error.toString() );
                    }
                });

        jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(8000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        RequestQueue requestQueue=Volley.newRequestQueue(this) ;
        requestQueue.add(jsonObjectRequest);
    }
}
محمد واحدی

با ریست کردن اندروید استودیو درست شد !
عجیب بود برنخورده بودم تا حالا به این مشکل!

سعید شاهینی

سلام، مرحله به مرحله باید break point بگذارید و debug کنید ببینید مشکل از کجاس. من که با خوندن کد شما چیزی متوجه نمی شم!

Mahdi Eshghi replyپاسخ

سلام استاد
اون قسمت api ادرس . شهر روی لندن تنظیم شده و وقتی تغییر میدم برای تهران و مشهد و … بازم یه نوع خروجی میده و عملا هیچ کاری نمیکنه فقط یک خروجی ثابت داره برای هر شهری که بدی !
تو سایتش نوشته این فقط یک مثال هست و واقعی نیست !!!
میشه یک سایت خوب معرفی کنید که اطلاعاتش واقعی باشه!!
ممنون
یه بار دیگه هم نظر دادم جواب ندادین!

سعید شاهینی

سلام این سایت اطلاعاتش واقعیه و مشکلی هم نداره: https://openweathermap.org/api

Mahdi Eshghi

میشه آدرس url این سایت openweathermap که خروجی جیسون برای شهر تهران رو بده
رو برام بفرستین
من هر کاری میکنم فقط یه خروجی اونم تز شهر لندن میده!

https://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b6907d289e10d714a6e88b30761fae22
حسین غلامی replyپاسخ

سلام استاد
من کلیه کد هایی که وارد کردین رو وارد کردم
تنظیمات مانیفس و کلاس و لایه کاملا درست زدم فیلتر شکن هم روشنه روی سایت هم اطلاعات آب و هوا رو میفرسته ولی تو اندروید استودیو
جواب نمیده و پیام زیر رو میفرسته :
WeatherSampleActivity: onErrorResponse: com.android.volley.NoConnectionError:
java.net.UnknownHostException:
Unable to resolve host “api.openweathermap.org”
No address associated with hostname

سعید شاهینی

دلیل این ارور این هست که سرور شما توسط گوشی اندروید قابل رویت نیست. که این معمولا مربوط به شبکه هست. اگه می خواید از شبیه ساز به سرور متصل بشید از ip 10.0.2.2 استفاده کنید.

Saeed Hoseini replyپاسخ

سلام خسته نباشید
استاد در خطی که از RequestQueueاستفاده کردیدمتاسفانه از کلمه ی this من ارور میگیره و مینویسه این نمیتونه برای اکتیویتی شما در خواست بشه.
مرسی اگر کمک کنید.

سعید شاهینی

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

ارسال نظرات

کاربر گرامی، امکان ارسال نظر و پشتیبانی برای دوره های مجازی فقط برای دانشجویان این دوره امکان پذیر می باشد.