标签: staledataexception

什么可能导致StaleDataException而不是过早地调用cursor.close()?

我目前正在大量修改/重写一个Android应用程序,我看到一个非常偶然的崩溃沿着以下几行:一个CursorAdapter方法被调用,它调用AbstractWindowedCursor#checkPosition(),和:

02-20 15:03:18.180 E/AndroidRuntime(17143): android.database.StaleDataException: Attempting to access a closed CursorWindow.Most probable cause: cursor is deactivated prior to calling this method.
02-20 15:03:18.180 E/AndroidRuntime(17143): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:139)
02-20 15:03:18.180 E/AndroidRuntime(17143): at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:74)
02-20 15:03:18.180 E/AndroidRuntime(17143): at android.database.CursorWrapper.getLong(CursorWrapper.java:106)
02-20 15:03:18.180 E/AndroidRuntime(17143): at android.widget.CursorAdapter.getItemId(CursorAdapter.java:220)
Run Code Online (Sandbox Code Playgroud)

麻烦的是,我们没有关闭任何Cursors.我们所有的Cursors都来自CursorLoaders而且又是由a产生的ContentProvider.我们要传递Cursor到每个相应的CursorAdapterLoaderCallbacks,我们正在注册Cursor中的通知ContentProvider,我们通知ContentResolver从各insert(...),delete(...)update(...)......总之我找不到任何理由为什么Cursor会在使用中关闭一段时间.

那么:a 的其他原因是 …

android staledataexception android-contentprovider android-loadermanager android-loader

12
推荐指数
1
解决办法
1012
查看次数

带对话框的StaleDataException

我试图显示一个带有listview的对话框,其中包含我的数据库中的名称,但我一直在使用StaleDataException.我知道这通常意味着我试图使用来自闭合光标的数据,但光标不会关闭,直到我得到所有数据所以我不明白为什么我得到这个

d = new Dialog(this);
d.setContentView(R.layout.dialog_layout);
d.setTitle("Select Bowler");

ListView lv = (ListView)d.findViewById(R.id.dialog_list);
Cursor c = getContentResolver().query(
    BowlersDB.CONTENT_URI,
    new String[] {
        BowlersDB.ID, BowlersDB.FIRST_NAME, BowlersDB.LAST_NAME
    },
    null,
    null,
    BowlersDB.LAST_NAME + " COLLATE LOCALIZED ASC"
);

if (c.moveToFirst() && c != null) {
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(
        this,
        R.layout.names_listview,
        c,
        new String[] {
            BowlersDB.FIRST_NAME, BowlersDB.LAST_NAME
        },
        new int[] {
            R.id.bListTextView, R.id.bListTextView2
        },
        0
    );
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View v, int position, long id) { …
Run Code Online (Sandbox Code Playgroud)

android staledataexception

7
推荐指数
2
解决办法
6465
查看次数

有人可以向我解释这个'StaleDataException`

有人可以向我解释一下 StaleDataException

07-11 19:58:23.298 E/AndroidRuntime( 1044): Uncaught handler: thread main exiting due to uncaught exception
07-11 19:58:23.368 E/AndroidRuntime( 1044): android.database.StaleDataException: Access closed cursor
07-11 19:58:23.368 E/AndroidRuntime( 1044): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:217)
07-11 19:58:23.368 E/AndroidRuntime( 1044): at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:84)
07-11 19:58:23.368 E/AndroidRuntime( 1044): at android.database.CursorWrapper.getInt(CursorWrapper.java:128)
Run Code Online (Sandbox Code Playgroud)

我们何时以及如何确保对游标进行查询,以及为什么在此异常时失败?

android exception staledataexception

5
推荐指数
1
解决办法
3921
查看次数