我有一个显示图像和文本的列表视图。我想一次显示 8 个列表视图行,从服务器下载数据。当用户滚动列表视图时,我需要下载更多数据表单服务器并在列表视图中显示项目。我使用 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().getInputStream());
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().getInputStream());
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 个列表视图行。假设服务器有 10000 个数据项。当用户向下滚动时,我需要一次在列表视图中显示 8 个项目下载其余项目。当用户向下滚动时,应该下载并显示新数据,直到用户能够看到第 10000 个数据。这段代码有什么问题???