PDA

View Full Version : دریافت اطلاعات از سرور و نمایش در لیست ویوو



hosseinaryai
دوشنبه 10 آذر 1393, 13:39 عصر
سلام ..
اووممم .. خب من بصورت عادی می تونم به سرور وصل بشم .. اطلاعاتو از دیتابیس بگیرم و توی لیست ویوو نمایش بدم .. اما مشکل از جایی شروع میشه که اطلاعات دیتابیس زیاد میشه ..
می خوام وقتی صفحه لود میشه ، مثل 20 رکورد اول دیتابیسو بگیره .. بعد که لیست ویوو رو اسکرول کرد و به آخر رسید 20 رکورد بعدی دانلود بشه و به همین منوال ادامه پیدا کنه .. چیکار باید بکنم ؟

Nevercom
دوشنبه 10 آذر 1393, 16:06 عصر
کارهایی که باید در سمت سرور انجام بدید:
متد مربوط به واکشی اطلاعات از دیتابیس رو به شکلی تغییر بدید که پارامتری تحت عنوان Offset دریافت کنه، این پارامتر نشون میده که رکوردها رو از این عدد به بعد دریافت کن (مثلاً از رکورد شماره ی ۲۰ به بعد - که میشه صفحه ی دوم اطلاعات شما، زمانی که اطلاعات رو در بسته های ۲۰ تایی دریافت می کنید) ایده ی خوبی هست که پارامتری تحت عنوان Limit هم دریافت کنید که مثلاً اگر خواستید اطلاعات رو در بسته های ۴۰ تایی دریافت کنید، نیاز به تغییر زیادی نباشه.
بد نیست در این متد یکبار تعداد کل رکوردها برای کوئری موردنظر رو بدست بیارید و برای کلاینت بفرستید، تا کلاینت بدونه حداکثر چقدر اطلاعات داره و اگر همه رو لود کرد دیگه به لود کردن ادامه نده.

مشخصاً می دونید که در SQL از عبارت LIMIT باید استفاده کنید تا این مورد رو پیاده سازی کنید (LIMIT OFFSET,COUNT)

در سمت اندروید:


روش کلی این هست که یک Listener تعریف کنید تا متوجه بشید چه زمانی View نمایش دهنده (مثلاً ListView یا RecyclerView) به انتهای لیست رسیده و در اون زمان درخواست جدید رو به سرور ارسال کنید تا اطلاعات بعدی (مثلاً ۲۰ تای بعدی) رو براتون بفرسته.
با دریافت اطلاعات، داده های جدید رو به آداپتور اضافه کنید و متد notifyDatasetChanged رو روی آداپتور صدا بزنید.

یادتون هم باشه که هربار به تعداد Limit (که نشاون دهنده ی این هست که هربار چند رکورد دریافت بشه) به Offset اضافه کنید، بعنوان مثال Offset در ابتدا صفر (0) هست، بعد از اولین دریافت اطلاعات، به تعداد Limit بهش اضافه میشه. حالا وقتی به انتهای لیست برسیم، درخواستی که به سرور ارسال میشه، مقدار Offset مثلاً 20 هست و سرور اطلاعات رو از خونه ی 20 به بعد و به تعداد 20 تا براتون ارسال می کنه و ....

hosseinaryai
دوشنبه 10 آذر 1393, 20:08 عصر
روش کلی این هست که یک Listener تعریف کنید تا متوجه بشید چه زمانی View نمایش دهنده (مثلاً ListView یا RecyclerView) به انتهای لیست رسیده و در اون زمان درخواست جدید رو به سرور ارسال کنید
همه جاشو گرفتم چی .. فقط اینو نمی دونم باید چیکار کنم :بامزه:

Nevercom
دوشنبه 10 آذر 1393, 20:24 عصر
بستگی به View مورد استفاده داره، APIشون فرق می کنه.
برای ListView این نمونه ها رو ببینید:

http://benjii.me/2010/08/endless-scrolling-listview-in-android/
http://mobile.dzone.com/news/android-tutorial-dynamicaly
http://stackoverflow.com/questions/21945264/endless-scrolling-listview