Android динамический список из sqlite

У меня есть ListView, который заполняется из базы данных SQLite. База данных состоит из 300 000+ строк, и список заполняется после поиска по разным данным (например, имя, фамилия, возраст и другие общие данные базы данных).

Он отлично работает для небольших результатов поиска, но если поиск возвращает более 2000 результатов, приложение зависает и останавливается.

Я хочу вернуть 100 результатов из базы данных, а затем, когда он прокручивается до конца списка, он возвращается к курсору и загружает еще 100. У меня работает динамический список, но он все еще зависает, потому что все еще ищет для 1000+ результатов и всего 100 результатов. Это какой-то псевдокод (поскольку список состоит из 500+ строк, есть тонны операторов if else в зависимости от того, что ищется)

    public class example extends Activity implements OnScrollListener{
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        setContentView(R.layout.showlist);
        //It opens database here
        ListView list = (ListView) findViewById(R.id.listView1);
            if(nameOnly is searched){
                //adds data to list with array adapter here
                //return 100 results and put it in a list
            }else if(name and surname is searched){
                //adds data to list with array adapter here
                //return 100 results and put it in a list
            }else if (surname only searced){
                //adds data to list with array adapter here
                //return 100 results and put it in a list
            }
    }
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, 
    int visibleItemCount,     int totalItemCount) {
    boolean load = firstVisibleItem+visibleItemCount>=totalItemCount;
    if(load){
        //This is where i want to set it to return 
    //the next 100 and add it to the list from the if else statements
    }       
}
@Override
public void onScrollStateChanged(AbsListView arg0, int arg1) {
}   
    }

Итак, я хочу попробовать снова навести курсор в OnScroll и использовать OFFSET в курсоре SQLite, но это не сработало. Я не знаю сейчас, если это лучший способ сделать это, поэтому любые идеи приветствуются!


person The Fish    schedule 22.11.2013    source источник
comment
для этого можно использовать технику отложенной загрузки.   -  person Sandeep    schedule 22.11.2013
comment
спасибо, я посмотрю на это, я не слышал об этом термине, так как я новичок в Android   -  person The Fish    schedule 22.11.2013
comment
Вы можете запустить запрос к базе данных в фоновом потоке и обновить представление списка, когда результаты будут получены и готовы. До этого вы могли показывать loading.. в пользовательском интерфейсе, например, googleusercontent.com/_ODdyLCCXPpQ/TZwr-_i8BHI/AAAAAAAAw08/ AsyncTask поможет.   -  person Amulya Khare    schedule 22.11.2013


Ответы (1)


Поскольку у вас много записей, у вас есть несколько вариантов, которые вы можете сделать. Вы можете использовать асинхронную задачу, чтобы загрузить запись или загрузить дополнительные средства.

Чтобы загрузить больше, вы можете проверить следующую ссылку Список с загрузкой подробнее

Также вы можете проверить асинхронную задачу Асинхронную задачу

person Sandeep    schedule 22.11.2013