У меня есть список, который отображает изображение и текст. Я хочу отображать 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-й данные. Что не так с этим кодом?.