دوره مجازی اندروید (جلسه 16): گرفتن آخرین اخبار از سرور php

دسته بندی: اندروید
زمان مطالعه: 1 دقیقه
۳۰ مرداد ۱۳۹۵

به نام خدا، سلام، در جلسه قبلی یک api service با php ایجاد کردیم که می توانستیم از طریق آن پست های حدید داخل پایگاه داده ذخیره کنیم و با فرمت json به کاربر برگردانیم. در این جلسه قصد داریم پست های ایجاد شده در سرور را داخل اپ نمایش دهیم.

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

 

  • اضافه کردن فایل جدید برای برگرداندن پست های سرور به اپ
  • دریافت اطلاعات از سرور با volley
  • نمایش اطاعات داخل صفحه آخرین اخبار
:: توجه

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

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

چه امتیازی به این مقاله می دید؟
نویسنده سعید شاهینی

جلسات دوره

پایان زمان پشتیبانی

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

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

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.

نظرات کاربران

موسوی

سلام استاد من میخوام روی هاست خودم تست کنم …مشکلی پیش نمیاد ؟ (منظورم لوکال هاست نیست,یه هاست خریدم )

سعید شاهینی

سلام نه، چه مشکلی می خواد داشته باشه آخه 🙂

محمد مهدی حسینی

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

محمد مهدی حسینی

خب ،راه حلش چیه؟
هر گوشی یک ایپی مخصوص به خود داره
پس نمیتونیم همشونو پوشش بدیم.

سعید شاهینی

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

محمد مهدی حسینی

با سلام و عرض ادب
کد مربوط به این جلسه رو بطور کامل نوشتم این کد روی شبیه ساز جنی موشنم کامل و درست اجرا میشود.
اما در گوشی اندرویدی از طرف جیسون خطایی بصورت زیر برای برنامه من ارسال میشود:
com.volley.NoConnentionError:java.net.SocketException:recvform failed:ECONNRESET(Connection reset by peer)
ممنون میشم اگر بتونید دررفع این مشکل کمکم کنید.

سعید شاهینی

سلام، خب کاملا مشخصه. دلیل این مشکل این هست که گوشی شما سرور رو نمی تونه ببینه ولی شبیه ساز تونسته. دلیلش مشکلات شبکه هست. مثلا اینکه رنج آیپی گوشی و سرورتون یکی نیست.

حانیه مطلق

سلام خسته نباشید من api service دریافت کردم و طبق آموزش های شما در برنامه ازش استفاده کردم چند بار هم چک کردم کدها شبیه کدهای شما بود ولی وقتی run میکنم اکتیویتی خالی نمایش داده میشه در صورتی که از datafake استفاده میکردم نمایش می داد و اینکه نتونستم کتابخونه پیکاسورو آنلاین اضافه کنم و از روش آفلاین استفاده کردم ولی در قسمت dependencies اضافه نشد ولی تونستم از پیکاسو تو کدهام استفاده کنم میشه راهنماییم کنید که ایراد ازکجا میتونه باشه؟

حانیه مطلق

و یه سوال دیگه اینکه ip server همون ، ip کامپیوتر خودمون میشه?یا همون 127.0.0.1 بزاریم?سرور الان اپاچی هست نه pc خودمون که بخوایم ip کامپیوتر بدیم درک نمیکنم این قسمت رو

سعید شاهینی

اگه می خواید از شبیه ساز به سرور خودتون وصل بشید، باید از آیپی 10.0.2.2 استفاده کنید.

حانیه مطلق

با کدهای php اصلا نتونستم پایگاه داده و جدول ایجاد کنم ارور not found میداد، به صورت دستی داخل phpmyadmin, پایگاه داده و جدول رو ساختم به کمک کد ها تونستم به پایگاه داده وصل بشم و api servies بگیرم و تو کدهام استفاده کنم ولی اکتیوتی خالی نشون میده، میتونه اشکال از اینجا باشه که دستی ساختم پایگاه داده رو?

سعید شاهینی

سلام، ابتدا داخل PostMan تست کنید که api درست کار می کنه یا نه، اگه اوکی بود، حتما مشکل از سمت اپلیکیشن هست و باید اپلیکیشن رو دیباگ کنید تا ببینید مشکل از کجاس

سعید شاهینی

سلام وقت بخیر. باید هر جا که مشکل و یا اروری هست اسکرین شات بدید که بتونم راهنمایی کنم. اینکه از api چیزی دریافت نمی شه دلایل مختلفی می تونه داشته باشه مثل:
1. خطای سروری یا 500. یعنی به هر دلیلی مشکلی سمت سرور بوجود اومده
2. مشکلات شبکه ای. یعنی دستگاه اندروید شما نتونسته به سرور متصل بشه
3. خطای سمت کلاینت یعنی شما. ممکنه اطلاعات از سرور به درستی دریافت شده باشن ولی سمت کد شما مشکلی وجود داشته باشه
برای اینکه بدونید دقیقا مشکل شما الان چی هست بایستی از ابزار دیباگ استفاده کنید

فردین عباسی

سلام استاد وقتتون بخیر
ip کارت شبکه ام رو 10.0.2.2 کنم؟
یا ip برای image_url تو دیتابیس رو 10.0.2.2 کنم؟ یا باید جای دیگه ای اینکار رو بکنم؟

ip کارت شبکه ام رو 10.0.2.2 کردم
و تمام ip image_url ها دیتابیسم ام رو 127.0.0.1 کردم یعنی(127.0.0.1/7learn/uploads/pic….jpg) و تو IDE اینکار رو کردم (replace(“127.0.0.1″,”10.0.2.2” بازم تصویرا لود نشدن
تمام ip image_url ها دیتابیسم ام رو 127.0.0.1 کردم و تو ()IDE replace رو حذف کردم بازم تصویرا لود نشدن
تمام ip image_url ها دیتابیسم ام رو http://localhost کردم یعنی(http://localhost/7learn/uploads/pic…jpg) و تو IDE اینکار رو کردم (replace(“localhost”,”10.0.2.2″ بازم تصویرا لود نشدن
آخرشم
تمام ip image_url ها دیتابیسم ام رو 10.0.2.2 کردم یعنی(10.0.2.2/7learn/uploads/pic…jpg) و تو IDE اینکار رو کردم (replace(“10.0.2.2″,”10.0.2.2” بازم تصویر لود نشد یه بار دیگه ()replace رو حذف کردم بازم اتفاقی نیفتاد

ممنون میشم راهنماییم کنید

سعید شاهینی

هر ip که بخوای به localhost شما اشاره کنه باید 10.0.2.2 باشه

فردین عباسی

سلام استاد
عکسها رو تو پایگاه داده آپلود کردم ولی وقتی اندروید استودیو رو اجرا میکنم همه نوشته ها رو بالا میاره جز عکسا
هم با کدهای خودم امتحان کردم هم با کدهایی که شماگذاشته بودید
ممنون میشم راهنماییم کنید

فردین عباسی

مجددا سلام استاد
این error رو میده

08-11 14:42:36.226 4075-4075/com.example.developer.myapplication E/RecyclerView: No adapter attached; skipping layout
08-11 14:42:36.817 4075-4075/com.example.developer.myapplication E/ApiService onErrorResponse: com.android.volley.NoConnectionError: java.net.ConnectException: failed to connect to /192.168.1.100 (port 80) after 18000ms: isConnected failed: ECONNREFUSED (Connection refused)
سعید شاهینی

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

سعید شاهینی

سلام، مشکل این هست که دستگاه اندرویدی که دارید روش تست می کنید آدرس سرور شما رو پیدا نمی کنه

سعید شاهینی

سلام وقت بخیر، شما باید یک breakpoint داخل متد onResponse و onError بگذارید و اونجا چک کنید که مشکل از کجاست. این لاگی که الان گذاشتید عملا هیچ کمکی نمی کنه