آموزش پارس Json + قرار دادن در RecyclerView
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش پارس Json + قرار دادن در RecyclerView می پردازیم منظور از پارس (parse) تجزیه است. در ادامه خواهید دید که به چه شکل زیبای نمایش داده خواهد شد (سعی کردیم شبیه به بخش فروشگاه دیجی کالا باشد) در این آموزش از کتاب خانه قدرتمند Retrofit برای بخش پارس json استفاده می کنیم در ادامه می توانید پیش نمایشی از آن را مشاهده کنید با ما همراه باشید..
در این آموزش از کتاب خانه های زیر استفاده کرده ایم.
- Android Retrofit
- GSON Converter
- RecyclerView
- CardView
- Universal Image Loader
در ابتدای کار باید وارد فایل Build.gradle از نوع module شده و در بخش dependencies خط های زیر را اضافه کنید.
سپس پروژه را sync کنید کمی بیشتر از حد معمول طول می کشد چون تعداد کتاب خانه ها زیاد است . علت خطاهای احتمالی گریدل را قبلا بررسی کرده ایم در سایت واژه “gradle” را جستجو کنید.
بعد از sync شدن پروژه وارد فایل AndroidManifest.xml شده و دسترسی زیر را اضافه کنید.
حالا وارد layout خود شده در اینجا نام آن برابر با activity_main.xml است و کد های زیر را در آن قرار دهید.
همانطور که مشاهده می کنید یک RecyclerView در layout اصلی قرار داده ایم.
حالا باید یک فایل به نام list.xml ایجاد کرده و کدهای زیر را در آن قرار دهید.
شاید بپرسید این کدام بخش از کار است . کد بالا در RecyclerView ما render یا بارگذاری می شود که شامل CardView و عکس ها و Text ها می شود .
حلا باید یک InterFace به نام ApiService.java با annotation (تفسیر) “@GET” برای دریافت Response ایجاد کرده همانند زیر
در بالا /api/product.php بخشی از مسیر json ما است. نباید در آن http قرار دهید.
مسیر فایل json در هاست ما
حالا باید getter و setter خودمان را ایجاد کنیم پس یک فایل به نام Product.java ایجاد کرده و کدهای زیر را در آن قرار دهید.
زمان آن رسیده که آداپتور مربوط به RecyclerView ایجاد کنیم پس یک فایل به نام Recycleradapter.java ایجاد کرده و کدهای زیر را در آن قرار دهید.
قبلا هم چندین بار این کلاس را توضیح داده بودیم ولی یک اشاره کوچک به آن خواهیم کرد ابتدا layout که درست کردیم اگر یادتان باشد اسم آن برابر با list بود باید آن را Inflate کنیم بعد از آن زمان آن است که مقدار های را در Textview ها قرار دهیم فقط TexTview نیست ImageView و بیقه اجزا نیز هستند باید تعداد card های که می خواهند درآنها TextView و Image View و.. قرار بگیرد به دست بیاید.
و در آخر باید کد زیر را در MainActivity.java قرار دهید.
برای اینکه به شکل دوتایی بقل هم نمایش پیدا کنند از LayoutManager استفاده شده است همانطور که در ابتدای کد دید از Retrofit برای دریافت json استفاده شده است و در قبل هم اشاره کرده که ادرس json باید به صورت خاص به retrofit داده یا feed شود برای اینکه دوتای به صورت دقیق در کنار هم قرار گیرند ما اندازه صفحه به pixel به دست آوردیم سپس از فاصله هر ستون کم کردیم و در آخر آن را قرار داده ایم.
این آموزش هم به پایان رسید.
موفق و موید باشید.
سلام
موقع نوشتن اینترفیس ApiService به مشکل بر میخورم.
میشه درباره Book که توش استفاده کردید یه توضیحی بدید؟
یا به ایمیلم ارسال کنید؟
سلام فکر می کنم شما کلاس جاوا برای Interface ایجاد می کنید باید یک InterFace ایجاد کنید نه کلاس جاوا و جزئیات بیشتری قرار دهید تا مشکلاتان را بتوانیم حل کنیم.
موفق باشید.
خیر اینترفیس ساختم و در پوشه کلاس های جاوا قرار داره اما با دستور گفته شده مشکل داره و اجراش نمیکنه.
دوست عزیز دوباره برنامه رو تست کردم مشکلی وجود ندارد بخش AndroidMonitor رو بررسی کنید و خط خطا را به دست بیارید یا از طریق log گرفتن به خطا رسیده برای ما قرار دهید.
مشکل از Book هست.
کلا تا قبل از نوشتن Book همه رو شناسایی میکنه اما Book رو شناسایی نمیکنه و بخاطر خطایی که میده نمیشه پروژه رو Run کنم.
انگار اصلا Book تعریف نشده.من هم تعریف نکردم براش.
چجوری باید مشکل رو حل کرد؟
میشه فایل ApiService خودتون رو بفرستید؟
چون من دقیقا همین چیزی که برای interface (تکه کد پنجم همین آموزش) نوشته شده براش میزارم اما مشکل همونه.
ببخشید درست گفته بودید اصلا book تعریف نشده است کمی دقت می کردید باید در آن product را جایگزین می کردید. پست ویرایش شد .
سلام مشکل قبلی حل شد.
فقط مشکل جدید این هست که چرا وقتی من JSON خودم رو بهش میدم عمل نمیکنه؟
و اینکه آیا تو همون اینترفیس وقتی book عوض شد بعدش هم قسمت getBookdetails هم باید عوض بشه؟
و اینکه چی باید چی بجاش گذاشت و چی هست اصلا؟
سلام اولین که آدرس Json را باید به صورت خاص همانند آموزش قرار دهید نباید به طور مستقیم باشد و دوم محتوای json بسیار حساس است و در صورت گذاشتن یک نقطه اشتباه ممکن است خطا ایجاد شود توصیه من استفاده از json parser های آنلاین است و در چواب به سوال دومتان خیر فقط باید book به product تغییر می کرد چون در برنامه کلاس model به نام product ایجاد شده بود کار این کلاس هم این است که بعد از دریافت json و هنگام پارس آن ما به یک بخشی نیاز داریم تا هر مقدار متن یا عکس هر آیتم را در recyclerview قرار دهد پس باید getter و setter تعریف شود تا داده های دریافت شده در هر آیتم قرار گیرند.
سلام
آدرس json من به این صورت هست که توسط کد های پی اچ پی داده ها از دیتابیس گرفته و سپس به جیسون تبدیل میکند و در صفحه نمایش میدهد.
حالا من برای تمام آیتم ها getter , setter ثبت میکنم اما باز هم برای من هیچ چیز نمایش نمیدهد.
و جالب اینجاست که وقتی آدرس جیسون شما را میدهم مشکلی ندارد.
و اینکه اگر بعضی آیتم ها را (مانند instock) که در حال حاضر نیاز نداریم getter , setter تنظیم نکنیم در پارس کردن کلی جیسون مشکلی بوجود می آید؟
و اگر یک آیدی ایمیل یا آی دی تلگرام قرار دهید یا به ایمیل بنده ارسال کنید میشود بهتر سوال ها را پرسید.
سلام
مشکلی ندارد اگر json درست باشد نمایش داده می شود ولی بخش پارس json خیلی مهم است اگر چیزی را json حذف کردید باید تغییرات را نیز در خود کد اعمال کنید به طور مثال اگر یک object از json حذف شود باید در کد آن object نیز حذف شود در صورتی که در صورتی که در getter و setter تغییر ایجاد کنید باید در بخش Recycleradapter.java نیز تغییراتی ایجاد کنید (باید holder ها نیز حذف شوند.)
آیدی من برای ارتباط در تلگرام
@bbong9811
موفق باشید.