国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

android - viewPager滑動瀏覽一組大圖,滑動倒數第二張時請求新數據追加數據……

瀏覽:135日期:2024-08-19 10:09:10

問題描述

在listView中點擊例如“美女圖片”后打開一個largeActivity;

largeActivity中有一個viewPager實現左右滑動瀏覽大圖;

在largeActivity打開的時候會通過okHttp從服務器請求一組5張圖片鏈接,圖片通過glide加載在viewPager中實現左右滑動瀏覽;

因為每次網絡請求只能返回5張圖片鏈接,所以我在監聽每次滑動viewPager的時候判斷當前 postion小于存儲圖片鏈接的imageList.size() -1的時候,也就是每次滑動到倒數第二張的時候去網絡請求下一組圖片的鏈接;

然后通過add將新請求到的圖片鏈接添加進imageList,然后再執行一次pagerAdapter.notifyDataSetChanged()來實現viewPager繼續滑動瀏覽新請求到的圖片。

現在問題是如果用戶以正常速度滑動viewPager來瀏覽每張圖片的時候是沒有任何問題的,但是如果用戶飛速滑動viewPager的進行瀏覽的時候就會出現在某一次請求新數據后就會出現APP崩潰的情況;錯誤信息在兩部不同的手機上報錯不一樣,但是都是在相同的情況下崩潰。Google遍都沒有找到解決辦法

華為榮耀報錯如下:

android - viewPager滑動瀏覽一組大圖,滑動倒數第二張時請求新數據追加數據……

通過華為手機的報錯在網上找到通過設置 android:hardwareAccelerated='false'來關閉硬件加速的辦法,但是通過測試在快速滑動時還是會導致APP崩潰自動重啟的情況

樂視max2報錯如下:

03-21 05:42:44.071 18730-18730/com.abcd.reader.abcdreader E/InputEventReceiver: Exception dispatching input event.03-21 05:42:44.071 18730-18730/com.abcd.reader.abcdreader E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback03-21 05:42:44.084 18730-18730/com.abcd.reader.abcdreader E/MessageQueue-JNI: java.lang.IllegalStateException: The application’s PagerAdapter changed the adapter’s contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 25, found: 30 Pager id: com.abcd.reader.abcdreader:id/vp_pager Pager class: class android.support.v4.view.ViewPager Problematic adapter: class com.abcd.reader.abcdreader.adapter.FollowDetailViewPagerAdapter

通過樂視手機的報錯懷疑是當新請求的數據add進imageList后,但是還沒來得及執行notifyDataSetChanged,剛好在這時用戶在滑動viewPager的時候導致的;為了驗證猜測我修改了在當前 postion小于存儲圖片鏈接的imageList.size() -2的時候,也就是每次滑動到倒數第三張的時候去網絡請求下一組圖片的鏈接;給imageList.add和notifyDataSetChanged預留了充分的執行時間,這時候再次測試問題消失,華為手機和樂視手機均沒有再出現APP崩潰重啟的情況

但是我這個服務器請求回來的數據是不固定的,有時候可能每次返回5條,有時候10條,有時候只有1條,所以我現在的解決辦法并不能徹底解決煩請老師們給予指點一二,萬分感謝!

問題解答

回答1:

大膽估計一下應該是線程安全問題,可以嘗試一下以下修改,獲取新數據時,使用post方法去做更新,即viewPager.post(),notifyDataSetChanged放到post任務里去。還沒親自驗證,如果不可以,也麻煩你告訴我一聲,我再看看。

回答2:

具體錯誤原因我暫時無法幫你定位,我給你另一個實現的思路,可以嘗試使用RecycleView來實現同樣的效果。

回答3:

不知道是不是我理解錯了,但images.size()-1不是倒數第二張,而是最后一張

建議把從服務器拉取條目的邏輯寫到Adapter的getItem;

@Overridepublic Fragment getItem(int position) { if(getCount()-1 == position){//在此處拉取 } return ArrayListFragment.newInstance(position);}回答4:

策略就錯了,每次只返回5個image的url是為什么?難道是為了節省流量嗎?最大的浪費是三次握手的創建過程,上來就應該拿到所有的url,然后自己控制圖片緩存。你每次到倒數第二張再去請求,也不怕麻煩.....

回答5:

看問題,題主是在viewpager滑動監聽的方法里面做網絡請求,如果使用者快速左右滑動viewpager,很可能多次執行該回調。而之前的網絡請求還在進行中,再次請求也就崩潰了。如果是這個原因造成的話,你可以增加一個標記,如果當前請求正在進行中,在沒有得到正確或錯誤的回調前,不再進行新的網絡請求。至于返回不條目數不固定的問題,如果你請求5張圖片,服務器只返回3張,說明服務器圖片已經全給你了,你的網絡請求也就不要執行了

主站蜘蛛池模板: 美国一级片在线 | 国产黄色免费网站 | 日韩在线资源 | 久久久久久久国产精品影院 | 久久一本一区二区三区 | 日本成年人视频网站 | 女人张开腿让男人桶免费最新 | 亚洲国产精品自产拍在线播放 | 国产亚洲一欧美一区二区三区 | 日本免费在线一区 | 欧美三级一区二区三区 | 德国女人一级毛片免费 | 香蕉超级碰碰碰97视频在线观看 | 欧美一级色视频 | 色久天堂网| 国产欧美亚洲三区久在线观看 | 婷婷色综合久久五月亚洲 | 日本三级久久 | 欧美黑粗特黄午夜大片 | 免费一级做a爰片久久毛片 免费一级做a爰片性色毛片 | 国产区更新 | 男女视频免费网站 | 国产欧美在线观看 | 欧洲国产伦久久久久久久 | 久久久国产精品免费视频 | 9191久久久久视频 | 久久综合丁香 | 美女把张开腿男生猛戳免费视频 | 成人免费视频网站 | 国产片自拍 | 成人精品亚洲人成在线 | 欧美另类孕交免费观看 | 欧美在线 | 亚洲 | 精品国产香蕉伊思人在线 | 老司机精品影院一区二区三区 | 中文字幕在亚洲第一在线 | 午夜在线伦理福利视频 | 男女性高清爱潮视频免费观看 | 在线免费黄网 | 久久国产三级精品 | 国产成人精品日本亚洲麻豆 |