2012-02-06 2 views
2

У меня есть просмотр списка данных из удаленной базы данных mysql и возвращение результатов в формате json. Запрос включает в себя поле даты. Я хотел бы реализовать бесконечную функцию списка, чтобы она загружала 20 результатов одновременно и, возможно, заголовок для каждого дня, который находится в поле даты. Сначала я хочу сосредоточиться на списке загрузки с постепенным загрузкой.Endless ListView

Запрашиваю ли я весь запрос и просто возвращаю результаты в списке в значениях, которые я хочу, или мне нужно изменить запрос?

Вот мой код для извлечения данных:

private class LoadList extends AsyncTask<String, UserRecord, JSONArray> { 
    protected JSONArray doInBackground(String... link) { 

     URI uri = null; 
     try { 
      uri = new URI(link[0]); 
     } catch (URISyntaxException e2) { 
      // TODO Auto-generated catch block 
      e2.printStackTrace(); 
     } 

     //http post 
     try{ 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(uri); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 
     }catch(Exception e){ 
      Log.e("log_tag", "Error in http connection"+e.toString()); 
     } 

     //convert response to string 
     try{ 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
      sb = new StringBuilder(); 
      sb.append(reader.readLine() + "\n"); 

      String line="0"; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      result=sb.toString(); 
     }catch(Exception e){ 
      Log.e("log_tag", "Error converting result "+e.toString()); 
     } 

     try{ 
      jArray = new JSONArray(result); 
      JSONObject json_data=null; 

      displayname = new String[jArray.length()]; 
      song_name = new String[jArray.length()]; 
      artist = new String[jArray.length()]; 
      description = new String[jArray.length()]; 
      genre = new String[jArray.length()]; 
      custom_genre = new String[jArray.length()]; 
      album = new String[jArray.length()]; 
      timestamp = new String[jArray.length()]; 
      song_id = new String[jArray.length()]; 
      avatar = new String[jArray.length()]; 
      drawable = new Drawable[jArray.length()]; 
      test_rating = new Float[jArray.length()]; 
      songurl = new String[jArray.length()]; 
      viewss = new String[jArray.length()]; 

      for(int i=0;i<jArray.length();i++){ 
       json_data = jArray.getJSONObject(i); 
       song_id[i]=json_data.getString("id"); 
       song_name[i]=json_data.getString("songname"); 
       artist[i]=json_data.getString("artist"); 
       displayname[i]=json_data.getString("displayname"); 
       description[i]=json_data.getString("description"); 
       genre[i]=json_data.getString("genre"); 
       custom_genre[i]=json_data.getString("customgenre"); 
       album[i]=json_data.getString("album"); 
       timestamp[i]=json_data.getString("format"); 
       avatar[i]=json_data.getString("image_url"); 
       songurl[i]=json_data.getString("song_url"); 
       //drawable[i] = LoadImageFromWebOperations(avatar[i]); 
       test_rating[i] = (float) json_data.getDouble("rating"); 
       viewss[i] = json_data.getString("views"); 
       user5 = new UserRecord(genre[i], displayname[i], timestamp[i], drawable[i], test_rating[i], songurl[i], viewss[i], song_id[i], avatar[i]); 

       publishProgress(user5); 

      } 
     } 
     catch(JSONException e1){ 
      e1.printStackTrace(); 

     } catch (ParseException e1) { 
      e1.printStackTrace(); 
     }   

     return null; 
    } 

    protected void onProgressUpdate(UserRecord... progress) { 
     users.add(user5); 

    } 

    protected void onPostExecute(JSONArray jArray) { 
     listView.setAdapter(new UserItemAdapter(mainmenu.this, android.R.layout.simple_list_item_1, users)); 
     dialog.dismiss(); 
    } 

    protected void onPreExecute(){ 
     dialog = ProgressDialog.show(mainmenu.this, "", 
       "Loading. Please wait...", true); 
    } 
} 

Может кто-то мне точку в правильном направлении/шаги мне нужно сделать для того, чтобы это произошло

+0

Вы имеете в виду прокручиваемый список? Что-то вроде этого http://developer.android.com/resources/tutorials/views/hello-listview.html – kosa

+0

Нет, я имею в виду разбивку на страницы. Таким образом, мой запрос возвращает 60 элементов. Я хочу прокручивать их по 15 предметов за раз (4 страницы). –

ответ

0

IMHO, вы должны изменить только запрос для своего курсора, который будет LIMIT строк, взятых для тех, которые вам нужны. Тогда ваш адаптер может быть общим.