Android-SimpleCursorAdapter changeCursor函数太慢

Android-SimpleCursorAdapter changeCursor函数太慢,android,spinner,simplecursoradapter,Android,Spinner,Simplecursoradapter,我正在寻找一个解决方案,以加快更新我的微调器。目前,我正在使用SimpleCursorAdapter,并在基于先前选择的微调器更改搜索条件时调用ChangeCursor 我做了一些计时测试,查询时间从5毫秒到60毫秒,而changeCursor函数则在600毫秒到4000毫秒之间。是否有另一种方法可以更快地更新适配器上的光标?我没有使用相同的查询,因此我不能简单地重新查询游标,然后调用notifydatasetchanged。我必须创建一个新的查询,然后返回一个新的游标(也许有更好的方法来完成这

我正在寻找一个解决方案,以加快更新我的微调器。目前,我正在使用SimpleCursorAdapter,并在基于先前选择的微调器更改搜索条件时调用ChangeCursor

我做了一些计时测试,查询时间从5毫秒到60毫秒,而changeCursor函数则在600毫秒到4000毫秒之间。是否有另一种方法可以更快地更新适配器上的光标?我没有使用相同的查询,因此我不能简单地重新查询游标,然后调用notifydatasetchanged。我必须创建一个新的查询,然后返回一个新的游标(也许有更好的方法来完成这一部分)

以下是我目前的人口情况

private void writerSpinner() {
        String[] columns = new String[] { Passage.COL_WRITER_ID + " " + BaseColumns._ID, Passage.COL_WRITER_NAME };
        String whereClause = null;
        String groupBy = null;
        String orderBy = Passage.COL_WRITER_ID + " ASC";

        if (mAdapterPassage == null) {
            String[] columnsSpinner = new String[] { Passage.COL_WRITER_NAME };
            int[] to = new int[] { android.R.id.text1 };

            mAdapterPassage = new SimpleCursorAdapter(getActivity(), android.R.layout.simple_spinner_item, null, columnsSpinner, to);
            mAdapterPassage.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            mPassage.setAdapter(mAdapterPassage);
            mPassage.setOnItemSelectedListener(onItemSelectedListener);
        }

        AsyncLoadData loadData = new AsyncLoadData(mAdapterPassage, mPassage, Passage.TABLE_NAME_WRITERS, columns, whereClause, groupBy, orderBy);
        loadData.execute();
    }

    private void updateChapterSpinner() {
        String[] columns = new String[] { Passage.COL_WRITER_ID + " " + BaseColumns._ID, Passage.COL_CHAPTER_ID };
        String whereClause = Passage.COL_WRITER_ID + " = " + mSelectedWriterId;
        String groupBy = Passage.COL_CHAPTER_ID;
        String orderBy = Passage.COL_CHAPTER_ID + " ASC";

        if (mAdapterChapter == null) {
            String[] columnsSpinner = new String[] { Passage.COL_CHAPTER_ID };
            int[] to = new int[] { android.R.id.text1 };

            mAdapterChapter = new SimpleCursorAdapter(getActivity(), android.R.layout.simple_spinner_item, null, columnsSpinner, to);
            mAdapterChapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            mChapter.setAdapter(mAdapterChapter);
            mChapter.setOnItemSelectedListener(onItemSelectedListener);
        }

        AsyncLoadData loadData = new AsyncLoadData(mAdapterChapter, mChapter, Passage.TABLE_NAME_PASSAGES, columns, whereClause, groupBy, orderBy);
        loadData.execute();
    }

    private void updateVerseSpinner() {
        String[] columns = new String[] { Passage.COL_WRITER_ID + " " + BaseColumns._ID, Passage.COL_VERSE_ID };
        String whereClause = Passage.COL_WRITER_ID + " = " + mSelectedWriterId
                + " AND " + Passage.COL_CHAPTER_ID + " = " + mSelectedChapter;
        String groupBy = Passage.COL_VERSE_ID;
        String orderBy = Passage.COL_VERSE_ID + " ASC";


        if (mAdapterVerse == null) {
            String[] columnsSpinner = new String[] { Passage.COL_VERSE_ID };
            int[] to = new int[] { android.R.id.text1 };

            mAdapterVerse = new SimpleCursorAdapter(getActivity(), android.R.layout.simple_spinner_item, null, columnsSpinner, to);
            mAdapterVerse.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            mVerse.setAdapter(mAdapterVerse);
            mVerse.setOnItemSelectedListener(onItemSelectedListener);
        }

        AsyncLoadData loadData = new AsyncLoadData(mAdapterVerse, mVerse, Passage.TABLE_NAME_PASSAGES, columns, whereClause, groupBy, orderBy);
        loadData.execute();
    }

private class AsyncLoadData extends AsyncTask<Void, Void, Void> {
        String mTableName; 
        String[] mColumns;
        String mWhereClause;
        String mGroupBy;
        String mOrderBy;
        Spinner mSpinner;
        Cursor mCursor;
        SimpleCursorAdapter mAdapter;

        public AsyncLoadData(SimpleCursorAdapter adapter, Spinner spinner, String tableName, String[] columns, String whereClause, String groupBy, String orderBy) {
            mAdapter = adapter;
            mSpinner = spinner;
            mTableName = tableName;
            mColumns = columns;
            mWhereClause = whereClause;
            mGroupBy = groupBy;
            mOrderBy = orderBy;
        }


        @Override
        protected void onPreExecute()
        {
            //mSpinner.setVisibility(View.GONE);
        }

        @Override
        protected Void doInBackground(Void... arg0) {
            long startCursor = new Date().getTime();
            mCursor = mDBHandler.query(mTableName, mColumns, mWhereClause, null, mGroupBy, null, mOrderBy);
            long timeToQuery = new Date().getTime() - startCursor;          

            Log.i("CursorQuery", "Time to Query Cursor " + mGroupBy + ": "  + timeToQuery + "ms");

            return null;
        }

        @Override
        protected void onPostExecute(Void result)
        {   
            long startAdapter = new Date().getTime();
            mAdapter.changeCursor(mCursor);
            long timeToChangeCursor = new Date().getTime() - startAdapter;

            Log.i("AdapterQuery", "Time to Change Cursor " + mGroupBy + ": " + timeToChangeCursor + "ms");

            mAdapter.notifyDataSetChanged();
            //mSpinner.setVisibility(View.VISIBLE);
        }
    }

private OnItemSelectedListener onItemSelectedListener = new OnItemSelectedListener() {

        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            switch(parent.getId()) {
            case R.id.bible_passage:
                mSelectedWriterId = position + 1;
                updateChapterSpinner();
                break;
            case R.id.bible_chapter:
                mSelectedChapter = position + 1;    
                updateVerseSpinner();
                break;
            case R.id.bible_verse:
                mSelectedVerse = position + 1;
                break;
            }
        }

        public void onNothingSelected(AdapterView<?> parent) {

        }
    };
private void writerSpinner(){
字符串[]列=新字符串[]{Passage.COL\u WRITER\u ID+“”+BaseColumns.\u ID,Passage.COL\u WRITER\u NAME};
字符串whereClause=null;
字符串groupBy=null;
字符串orderBy=Passage.COL\u WRITER\u ID+“ASC”;
if(madapterpassession==null){
String[]columnsSpinner=新字符串[]{Passage.COL\u WRITER\u NAME};
int[]to=newint[]{android.R.id.text1};
madapterPassation=new SimpleCursorAdapter(getActivity(),android.R.layout.simple\u微调器\u项,null,columnsSpinner,to);
madapterPassation.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
mPassage.setAdapter(mAdapterPassage);
mPassage.setOnItemSelectedListener(onItemSelectedListener);
}
AsyncLoadData loadData=新的AsyncLoadData(mAdapterPassage、mPassage、Passage.TABLE\u NAME\u WRITERS、columns、where子句、groupBy、orderBy);
loadData.execute();
}
私有void updateChapterSpinner(){
字符串[]列=新字符串[]{Passage.COL\u WRITER\u ID+“”+BaseColumns.\u ID,Passage.COL\u CHAPTER\u ID};
字符串whereClause=Passage.COL\u WRITER\u ID+“=”+mSelectedWriterId;
字符串groupBy=Passage.COL\u CHAPTER\u ID;
字符串orderBy=Passage.COL\u CHAPTER\u ID+“ASC”;
如果(mAdapterChapter==null){
String[]columnspinner=新字符串[]{Passage.COL\u CHAPTER\u ID};
int[]to=newint[]{android.R.id.text1};
mAdapterChapter=new SimpleCursorAdapter(getActivity(),android.R.layout.simple\u微调器\u项,null,columnsSpinner,to);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
McChapter.setAdapter(Madapter章);
mChapter.setOnItemSelectedListener(onItemSelectedListener);
}
AsyncLoadData loadData=新的AsyncLoadData(mAdapterChapter、mChapter、Passage.TABLE\u NAME\u passions、columns、where子句、groupBy、orderBy);
loadData.execute();
}
私有void updateVerseSpinner(){
字符串[]列=新字符串[]{Passage.COL\u WRITER\u ID+“”+BaseColumns.\u ID,Passage.COL\u VERSE\u ID};
字符串whereClause=Passage.COL\u WRITER\u ID+“=”+mSelectedWriterId
+“和”+Passage.COL_CHAPTER_ID+“=”+mSelectedChapter;
字符串groupBy=Passage.COL\u VERSE\u ID;
字符串orderBy=Passage.COL\u VERSE\u ID+“ASC”;
if(mAdapterVerse==null){
String[]columnsSpinner=新字符串[]{Passage.COL\u VERSE\u ID};
int[]to=newint[]{android.R.id.text1};
mAdapterVerse=new SimpleCursorAdapter(getActivity(),android.R.layout.simple\u微调器\u项,null,columnsSpinner,to);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
mVerse.setAdapter(mAdapterVerse);
mVerse.setOnItemSelectedListener(onItemSelectedListener);
}
AsyncLoadData loadData=新的AsyncLoadData(mAdapterVerse、mVerse、Passage.TABLE\u NAME\u passions、columns、where子句、groupBy、orderBy);
loadData.execute();
}
私有类AsyncLoadData扩展了AsyncTask{
字符串名称;
字符串[]m列;
字符串子句;
字符串管理器;
弦摩德比;
纺纱机;
光标mCursor;
简单的适应;
公共AsyncLoadData(SimpleCursorAdapter适配器、微调器微调器、字符串表名、字符串[]列、字符串whereClause、字符串groupBy、字符串orderBy){
mAdapter=适配器;
mSpinner=旋转器;
mTableName=表名;
mColumns=列;
mWhere子句=where子句;
mGroupBy=groupBy;
摩德比=奥德比;
}
@凌驾
受保护的void onPreExecute()
{
//mSpinner.setVisibility(View.GONE);
}
@凌驾
受保护的Void doInBackground(Void…arg0){
long startCursor=new Date().getTime();
mCursor=mDBHandler.query(mTableName、mColumns、mWhereClause、null、mGroupBy、null、mOrderBy);
long-timeToQuery=new Date().getTime()-startCursor;
Log.i(“游标查询”,“查询游标的时间”+mGroupBy+:“+timeToQuery+“ms”);
返回null;
}
@凌驾
受保护的void onPostExecute(void结果)
{   
long startAdapter=new Date().getTime();
mAdapter.changeCursor(mCursor);
long-timeToChangeCursor=新日期().getTime()-startAdapter;
Log.i(“AdapterQuery”,“更改光标的时间”+mGroupBy+:“+timeToChangeCursor+“ms”);
mAdapter.notifyDataSetChanged();
//mSpinner.setVisibility(View.VISIBLE);
}
}
私有OnItemSelectedListener OnItemSelectedListener=新建OnItemSelectedListener(){
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
开关(parent.getId()){
案例R.id.bible_段:
mSelectedWriterId=位置+1;
updateCh
adapter.changeCursor(new HugeSQLiteCursor(db, stepSize,
                                          table, columnFields,
                                          selection, selectionArgs));