在我的应用程序中,我正在使用SimpleCursorAdapter更新Listviews。 此SimpleCursorAdapter从Cursor对象获取数据。 在这里,当我在onCreate方法中关闭游标时,它将引发StaleDataException:在游标关闭后尝试访问它 但是当我在游标上删除此close方法时,它没有发生并且运行良好 。但是,如果我们在游标上删除了close方法,那么它不会造成内存泄漏吗?

使用cursor.close()-

//the columns which we want to show in list view
    private static final String[] columnsToUse = new String[]{
            UserDictionary.Words.WORD,
            UserDictionary.Words.FREQUENCY};

    // array of item ids where above two entries will be saved
    private static final int[] toView = new int[]{
            android.R.id.text1,
            android.R.id.text2};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //TextView displayTextView = (TextView) findViewById(R.id.display_text);

        ListView dictionaryList = (ListView)findViewById(R.id.dictionary_list_view);

        ContentResolver resolver = getContentResolver();
        Cursor cursor = resolver.query(UserDictionary.Words.CONTENT_URI, null, null, null, null);

        cursor.moveToFirst();



        SimpleCursorAdapter dictionaryAdapter = new SimpleCursorAdapter(this, android.R.layout.two_line_list_item,
                cursor, columnsToUse, toView, 0);

        dictionaryList.setAdapter(dictionaryAdapter);
        cursor.close();

抛出-StaleDataException:尝试在关闭游标后访问游标

但是,如果我对此cursor.close()进行注释,则不会出现此错误-

   //the columns which we want to show in list view
        private static final String[] columnsToUse = new String[]{
                UserDictionary.Words.WORD,
                UserDictionary.Words.FREQUENCY};

        // array of item ids where above two entries will be saved
        private static final int[] toView = new int[]{
                android.R.id.text1,
                android.R.id.text2};

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            //TextView displayTextView = (TextView) findViewById(R.id.display_text);

            ListView dictionaryList = (ListView)findViewById(R.id.dictionary_list_view);

            ContentResolver resolver = getContentResolver();
            Cursor cursor = resolver.query(UserDictionary.Words.CONTENT_URI, null, null, null, null);

            cursor.moveToFirst();



            SimpleCursorAdapter dictionaryAdapter = new SimpleCursorAdapter(this, android.R.layout.two_line_list_item,
                    cursor, columnsToUse, toView, 0);

            dictionaryList.setAdapter(dictionaryAdapter);
           // cursor.close();

===============>>#1 票数:2 已采纳

这就是Cursor.close() 释放所有资源并使其完全无效的原因 ...如果在适配器之后立即调用Cursor.close()CursorAdapter将使用什么?

为了解决这个问题

onDestroy()或当listViewCursorAdapter不再需要它时,使用close()您的Cursor

===============>>#2 票数:0

我只想补充一点:

一旦不再关注活动的UI,则应释放绘制UI所需的系统资源。 由于这是在调用onStop()之后发生的,因此您应该准备好在onStop上释放资源。

因此,使用onStop()而不是onDestroy()方法来关闭游标。

  ask by El. translate from so

未解决问题?本站智能推荐:

1回复

Android ListView:应用程序未关闭游标或数据库对象

我的listview活动将不会在List view UI显示特定的行( sName )。 我能项目添加到我sqlite数据库,但试图让我的后listview刷新时我的数据库更新,我的列表视图是空白。 added\\updated\\removed数据时,我没有收到任何错误。 我确实收到
3回复

Android简单游标适配器和游标

我建立了一个应用程序,该应用程序使用具有不同属性的数据,将它们添加到数据库中,然后通过ListView进行显示。 我已经完成了添加数据的部分,但是我不知道如何从数据库中获取数据(现在我只想要名称)并在ListView中填充它。 这是数据库类中的部分。 这是活动中要显示List
1回复

如何在SimpleCursorTreeAdapter中为ExpandableListView格式化游标值

哇...这是一个很长的标题。 但是,这是我的问题的要点。 我返回一个游标,其中包含来自SQLiteDatabase表的数据,该表称为Budget。 数据库中的一列存储项目的货币金额。 桌子看起来像这样。 正确,因此我返回了游标,利用了我自己的自定义适配器,该适配器继承自S
1回复

Android:删除数据库行后如何重新查询游标以刷新ListView?

这可能是一个菜鸟问题,但对于所有这些SQLite-Database-Cursor-Adapter-ListView-Do-It-Properly-Stuff,我都是新手。 是)我有的: 在我的MainActivity我有一个ListView 。 我使用SQLite database
1回复

将选定的Spinner Item作为新游标的字符串

现在,我几乎完成了编写我的应用程序的工作。 我所需要的只是一点帮助,可以通过一个简单的游标适配器从数据库填充的微调器中获取选定的String值。 我不确定如何从我的微调器中获取String并将其传递给其他光标,然后在查询中使用该字符串,该字符串将取决于微调器的首选,并与其他微调器一起使用。
1回复

Android Simplecursoradapter不使用我正在传递的游标

这将创建一个包含整个表的列表,而不是我使用自定义值传递的游标,这是默认行为吗?
1回复

游标使用OnItemClickListener返回空值以完成自动填充

我正在使用内置的AutoCompleteTextView,并使用以下代码构建它的下拉列表: 当用户从下拉列表中选择一项时,我会收到“游标超出范围”异常。 “ CursorIndexOutOfBoundsException:请求索引0,大小为0” 这是我的代码,在我的活动的onCr
4回复

如何为列表视图创建自定义游标适配器以用于图像和文本?

您好想创建一个自定义光标适配器,以便我可以显示带有2行文本的图像。 我在理解自定义游标适配器时遇到了一些麻烦,但我不明白如何添加要从我的数据库中的路径填充的imageview。
1回复

通过游标从列中获取值

我正在尝试使用游标从请求的列中获取行的值,但我没有得到如何做到的,cursor.getLong(?)内的索引是什么,这是我的代码,但它不起作用工作吗 请帮忙。
1回复

CursorAdapter在尝试显示ListView时崩溃的应用程序(带有数据库中的内容)-内部的logcat

在我的应用程序中,单击时,“收藏夹”按钮应该打开一个带有列表视图的新窗口,该列表视图的内容来自数据库。 单击此按钮时出现NullPointerException。 这是相关代码: 我的logcat的这一部分显示了问题出在哪里: 当我注释掉这条线时,不再有NPE(但毫无作用)