android – 如何在滚动时将数据从服务器加载到listview?

android – 如何在滚动时将数据从服务器加载到listview?,第1张

概述我有一个列表视图显示一个图像和一个文本.我想要一次从服务器下载数据时显示8个listview行.当用户滚动列表视图时,我需要下载更多的数据表服务器,并在列表视图中显示项目.我使用AsyncTask从服务器下载数据. @Override protected Void doInBackground(Void... params) { getData();// get data 我有一个列表视图显示一个图像和一个文本.我想要一次从服务器下载数据时显示8个ListvIEw行.当用户滚动列表视图时,我需要下载更多的数据表服务器,并在列表视图中显示项目.我使用AsyncTask从服务器下载数据.
@OverrIDe    protected VoID doInBackground(VoID... params) {        getData();// get data first time. 8 data items.        return null;    }   @OverrIDe   protected voID onPostExecute(VoID result) {        super.onPostExecute(result);        pd.dismiss();        lv= (ListVIEw) findVIEwByID(R.ID.lvn);        yt = new YouTubeAdapter(Youtube.this,msg,Title,thumb);        lv.setAdapter(yt);        lv.setonScrollListener(new endlessscroll());    }

获取数据代码

public voID getData(){    httpClIEnt httpclIEnt = new DefaulthttpClIEnt();    httpclIEnt.getParams().setParameter(CoreProtocolPnames.PROTOCol_VERSION,httpVersion.http_1_1);    httpGet request = new httpGet("http://gdata.youtube.com/Feeds/API/users/mbbangalore/uploads?v=2&alt=Jsonc");         try    {    httpResponse response = httpclIEnt.execute(request);    httpentity resEntity = response.getEntity();    String _response=EntityUtils.toString(resEntity); // content will be consume only once    JsONObject Json = new JsONObject(_response);    JsonArray = Json.getJsONObject("data").getJsONArray("items");    for (int i = 0; i < 8; i++) {        JsONObject JsonObject = JsonArray.getJsONObject(i);        String Title1 = JsonObject.getString("Title");        Title.add(Title1);        String thumbUrl = JsonObject.getJsONObject("thumbnail").getString("sqDefault");        URL url1 = new URL(thumbUrl);        Bitmap bmp = BitmapFactory.decodeStream(url1.openConnection().get@R_403_5983@Stream());        thumb.add(bmp);        String url;        try {            url = JsonObject.getJsONObject("player").getString("default");            msg.add(url);        } catch (JsONException ignore) {        }    }    }     catch(Exception e1)        {            e1.printstacktrace();        }    httpclIEnt.getConnectionManager().shutdown();}

滚动时加载数据

class endlessscroll implements OnScrollListener {    private int visibleThreshold = 5;    private int currentPage = 0;    private int prevIoUsTotal = 0;    private boolean loading = true;    public endlessscroll() {    }    public endlessscroll(int visibleThreshold) {        this.visibleThreshold = visibleThreshold;    }    @OverrIDe    public voID onScroll(AbsListVIEw vIEw,int firstVisibleItem,int visibleItemCount,int totalitemCount)          if (lv.getLastVisibleposition() >= lv.getCount());             {System.out.println("............................"+"first"+ firstVisibleItem+"visible"+visibleItemCount+"total"+ totalitemCount);               for (int i= totalitemCount; i < JsonArray.length(); i++) {                   try                   {                   JsONObject JsonObject = JsonArray.getJsONObject(i);                   // The Title of the vIDeo                   String Title1 = JsonObject.getString("Title");                   Title.add(Title1);                   System.out.println("Title"+Title);                   String thumbUrl = JsonObject.getJsONObject("thumbnail").getString("sqDefault");                   URL url1 = new URL(thumbUrl);                   Bitmap bmp = BitmapFactory.decodeStream(url1.openConnection().get@R_403_5983@Stream());                   thumb.add(bmp);                   String url;                    url = JsonObject.getJsONObject("player").getString("default");                       msg.add(url);                   } catch (JsONException ignore) {                     //  url = JsonObject.getJsONObject("player").getString("default");                   }                   catch(Exception e)                   {                   }                   yt.notifyDataSetChanged();               }         }    }    @OverrIDe    public voID onScrollStateChanged(AbsListVIEw vIEw,int scrollState) {    }}

现在的问题.我可以用滚动显示8个ListvIEw行.想象一下,服务器有10000个数据项.当用户向下滚动时,我需要在列表视图中显示8项.当用户滚动下来时,应该下载和显示新数据,直到用户能够看到第10000个数据.这段代码怎么了?

解决方法 如果您不想使用滚动检测器,另一种方法是从适配器触发下载,当从getVIEw()请求最后一个项目时,运行任务并将更多项目附加到适配器的集合.然后调用notifyDataSetChanged().

更新:

参见演示要点here.

总结

以上是内存溢出为你收集整理的android – 如何在滚动时将数据从服务器加载到listview?全部内容,希望文章能够帮你解决android – 如何在滚动时将数据从服务器加载到listview?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1132214.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存