آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

نمایش current Page بصورت رندوم در درخواست JSON

احمد اسدی  11 سال پیش  11 سال پیش
+1 0

سلام

در برنامه یک لیست ویو همراه با Load More قرار داره که یه سری اطلاعات رو بصورت JSON از سرور میگره.

همه چی درست کار میکنه، ولی وقتی برنامه با دکمه Back یا Finish بسته میشه،  و دوباره برنامه رو اجرا میکنم، current Page که بصورت پیشرض یک هستش، یک عدد رَندوم میگره و  باعث میشه هیچ اطلاعاتی از سرور خونده نشه...

حالا من توش موندم چرا این  current Page  وقتی برنامه دوباره اجرا میشه یک نیستش :|

حتی من توی خود onCreate هم  current Page  رو برابر یک قرار دادم که هربار برنامه از صفر شروع میشه،  current Page  برابر یک باشه ولی هیچ...

و همچنین به برنامه گفتم وقتی بسته میشه،  current Page  رو برابر با یک کن و باز هم هیچ ... :|

مٌردم از بس تست زدم :|

ممنون

--------------

ویرایش:

هربار که Load More اجرا میشه این current_page در doInBackground یکی اضافه میشه (CurrentPage++) که در درخواست بعدی صفحه بعد رو از سرور بگیره .

من حدس میزنم، این عدد بزرگی که به CurrentPAge اختصاص داده میشه بخاطر اینه که doInBackGround خیلی اجرا میشه و درصورتی که باید به تعداد،  تعداد مطالب تقسیم بر 10 اجرا بشه...

+1 0
احتمالا شما تابع رندوم currentpage را در جایی نوشتید که بعد از oncreat اجرا می شود. ویدئوی چرخه اجرا بخش پنجم را ببینید. (11 سال پیش)
0 0
ممنونم احمدجان؛ بله این فصل رو مشاهده کردم قبلآ. الان مشکل رو پیدا کردم. بخاطر این بود که هربار لیست ویو به آخر میرسید، doInBackground اجرا میشد و باعث میشد Current Page همینطور ++ بشه. و این مشکل با یه شرط حل شد :) . ولی توش موندم که چرا وقتی برنامه بسته میشد و دوباره اجرا میگردم، دقیقآ مقدار Current Page برابر با مقداری بود که دقیقآ سری قبلی داشت. من در OnResume هم Current Page رو برابر با یک کردم که هربار با اجرا شدن برنامه ، این Current Page برابر با یک باشه. ولی هیچ تاثیری نداشت. (11 سال پیش)
+1 0
شما باید هنگام خروج َ، اجرای AsyncTask رو ببندی (11 سال پیش)
0 0
چطور ببندمش ؟ با Cancle کردن ؟ (11 سال پیش)
+1 0
خوب معلومه دیگه ، چون همیشه لیست ویو ی شما یک تعداد ردیف مشخصی را لود می کنه و بالطبع متغییر شما هم به تعداد دفعات مشخصی ++ می شود. (11 سال پیش)
0 0
بله اینو متوجه هستم احمد جان، خب چرا وقتی برنامه رو میبندم و بعد اجراش میکنم، اون متغییر Current Page که مقدار اولیش رو در onResume برابر با یک قرار دادم رو نمیگیره ؟ (11 سال پیش)
0 0
سورس شما رو که من ندارم. با قرار دادن یک تکه اش هم اینجا کارت نمیشه. پیشنهاد می کنم قبل ریست کردن متغیر و همچنین قبل از ++ کردن متغیر یک لوگ بندازی بعد ببینی کجا داره مشکل ایجاد می کنه. (11 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
احمد اسدی  11 سال پیش
0 0

احمد جان، من به لیست ویو گفتم وقتی اسکرول به 3تا مونده به آخر رسید، متود doInBackgound اجرا بشه تا لیست ویو آیتم های جدید رو بگیره. خب تا اینجاش هیچ مشکلی ندارم و برنامه بخوبی کار میکنه.

حالا اگه یک هدر به این لیست ویو اضافه کنم، شرط هایی که داخل setOnScrollListener قرار دادم کلآ بی تاثیر میشه. (دقیقآ وقتی این هدر اضافه بهشه) .

از این کدها دارم استفاده میکنم:

 listView.addHeaderView(headerView); //یک ویو به لیست ویو اضافه میکنم

        listView.setOnScrollListener(new OnScrollListener() {

            public void onScrollStateChanged(AbsListView view, int scrollState) {


            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                int lastItem = firstVisibleItem + visibleItemCount;
                if (adapter.getCount() >= 10 && lastItem  > adapter.getCount() - 3) {
                    boolean isLoading = false;
                    if (!isLoading) {
                        if(lastItem > lastItemPosition){
                            lastItemPosition = adapter.getCount();
                            Log.i("Url3",url);
                            new loadMoreListView().execute();
                        }
                        isLoading = true;
                    }
                }
            }

        });

مشکل از چیه ؟

 

پاسخ به سوال 
AhmadVB  11 سال پیش
+1 0

نمی دانم ایراد از این باشد یا نه ولی یک جای کدی که شما نوشته اید کاملا بی استفاده است شما  متغیر isloading را false قرار داده اید بعد شرط if  را طوری قرار داده اید که با توجه به false بودن این متغیر همیشه نتیجه شرط true خواهد بود. این جایی که شما این متغیر را تعریف کرده اید اشتباه است.

پیشنهاد می کنم این متغیر را در بالای همه متد ها به عنوان یک فیلد تعریف کنید.


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .