Бесконечный ListView - PullRequest
       1

Бесконечный ListView

2 голосов
/ 07 февраля 2012

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

Должен ли я выполнить весь запрос и просто вернуть результаты в виде списка с шагом, который я хочу, или мне нужно изменить запрос?

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

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);
    }
}

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

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

Посмотрите на CommonsWare EndlessAdapter .

0 голосов
/ 07 февраля 2012

ИМХО, вам следует изменить только запрос для вашего курсора, который ОГРАНИЧИТ строки, выбранные вами. Тогда ваш адаптер может быть обычным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...