从AsyncTask中的数据库中获取数据有时会抛出异常

时间:2012-08-08 06:54:05

标签: android cursor android-asynctask

我正在AsyncTask中从数据库中检索数据。有时它会完美地检索数据,但有时它会引发跟随感知。

08-08 12:14:13.140: E/AndroidRuntime(3659): FATAL EXCEPTION: AsyncTask #5
08-08 12:14:13.140: E/AndroidRuntime(3659): java.lang.RuntimeException: An error occured while executing doInBackground()
08-08 12:14:13.140: E/AndroidRuntime(3659):     at android.os.AsyncTask$3.done(AsyncTask.java:200)
08-08 12:14:13.140: E/AndroidRuntime(3659):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
08-08 12:14:13.140: E/AndroidRuntime(3659):     at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
08-08 12:14:13.140: E/AndroidRuntime(3659):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
08-08 12:14:13.140: E/AndroidRuntime(3659):     at java.util.concurrent.FutureTask.run(FutureTask.java:138)
08-08 12:14:13.140: E/AndroidRuntime(3659):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
08-08 12:14:13.140: E/AndroidRuntime(3659):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
08-08 12:14:13.140: E/AndroidRuntime(3659):     at java.lang.Thread.run(Thread.java:1019)
08-08 12:14:13.140: E/AndroidRuntime(3659): Caused by: android.database.sqlite.SQLiteMisuseException: library routine called out of sequence: , while compiling: SELECT _id, puzzle_number, path FROM puzzle_file_infors ORDER BY puzzle_number
08-08 12:14:13.140: E/AndroidRuntime(3659):     at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
08-08 12:14:13.140: E/AndroidRuntime(3659):     at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
08-08 12:14:13.140: E/AndroidRuntime(3659):     at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
08-08 12:14:13.140: E/AndroidRuntime(3659):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
08-08 12:14:13.140: E/AndroidRuntime(3659):     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
08-08 12:14:13.140: E/AndroidRuntime(3659):     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)

这是我的asynctask

public class BackgroundTask extends AsyncTask<String, Void, Cursor>{
    private final ProgressDialog m_cProgressDialog = new ProgressDialog(m_cContext);

     @Override
        protected void onPreExecute() {
            m_cProgressDialog.setMessage("Please Wait....");
            m_cProgressDialog.show();
        }

    @Override
    protected Cursor doInBackground(String... params) {
        m_cAdapter.open();
        m_cCursor = m_cAdapter.getAllPuzzles();
        startManagingCursor(m_cCursor);
        return m_cCursor;
    }

    @Override
    protected void onPostExecute(Cursor result) {
        startManagingCursor(result);
        if(result != null){
            m_cPuzzlesAdapter = new PuzzlesAdapter(PuzzlesActivity.this, result, m_cFromActivity);
            m_cGridView.setAdapter(m_cPuzzlesAdapter);
            m_cAdapter.close();
            if (m_cProgressDialog.isShowing()) {
                m_cProgressDialog.dismiss();
            }
        }
    }
}

我哪里错了?是不是因为我没有把光标关在适当的位置?为此,我使用了 startManagingCursor(),但它仍然无效。请指导我。

0 个答案:

没有答案