Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是否询问此返回游标的问题?_Java_Android_Cursor - Fatal编程技术网

Java 我是否询问此返回游标的问题?

Java 我是否询问此返回游标的问题?,java,android,cursor,Java,Android,Cursor,基本上,我有一个从数据库填充listview的方法 我收到光标上的空指针和“无法停止活动”错误 以下是我返回光标的方式: public Cursor getAppointmentsData() { String[] columns = new String[] { KEY_ROWAPPID, KEY_NAMEAPP, KEY_TYPEAPP, KEY_TIMEAPP, KEY_DATEAPP, KEY_COMMENTAPP }; Cursor c = ou

基本上,我有一个从数据库填充listview的方法

我收到光标上的空指针和“无法停止活动”错误

以下是我返回光标的方式:

public Cursor getAppointmentsData() {
    String[] columns = new String[] { KEY_ROWAPPID, KEY_NAMEAPP,
            KEY_TYPEAPP, KEY_TIMEAPP, KEY_DATEAPP, KEY_COMMENTAPP };
    Cursor c = ourDatabase.query(DATABASE_TABLEAPP, columns, null, null,
            null, null, KEY_NAMEAPP + " ASC", null);

    if (c != null) {
        if (c.getCount() > 0 && c.moveToFirst())

        {
            c.moveToFirst();

            return c;

        }

    }
    c.close();
    return null;
}
当数据库是空的,即没有数据时,它将崩溃…如果有数据,它就可以了。这让我相信我正在从游标返回一个空值

你们能看到这种返回光标的方法的问题吗

很抱歉这个简单的问题,但是在我把代码拆开之前,我想我会在这里问

新编辑:

公共游标getAppointsData(){ String[]columns=新字符串[]{KEY\u ROWAPPID,KEY\u NAMEAPP, KEY_TYPEAPP、KEY_TIMEAPP、KEY_DATEAPP、KEY_COMMENTAPP}; 游标c=ourDatabase.query(数据库_TABLEAPP,列,null,null, null,null,KEY_NAMEAPP+“ASC”,null)


你应该能够做到以下几点

if (c.moveToFirst()){
    return c;
}
原因是,
query()
方法不会返回null。它只会返回一个空游标。因此,不需要检查其是否为null。此外,
moveToFirst()
如果无法移动到第一行(因此,如果游标为空),则计算结果为false。因此,计数检查是多余的

但是,您确定从方法返回null是安全的吗?如果没有结果,您将明确返回null。此外,您是否知道在返回后不会调用
close()
方法(如果您有带结果的游标)

我不完全知道你如何处理返回的游标,但是我建议你只返回它,但是我怀疑你想要的只是

public Cursor getAppointmentsData() {
    String[] columns = new String[] { KEY_ROWAPPID, KEY_NAMEAPP,
            KEY_TYPEAPP, KEY_TIMEAPP, KEY_DATEAPP, KEY_COMMENTAPP };
    return ourDatabase.query(DATABASE_TABLEAPP, columns, null, null,
            null, null, KEY_NAMEAPP + " ASC", null);
}
更新-关于何时关闭光标

如果在返回光标之前关闭光标,那么方法
getAppointmentsData()
将返回一个关闭的光标。我很确定这不是您想要的。因为在这个阶段,您还没有完成光标的操作,所以现在自己清理还为时过早:)

首先,使用我上面建议的方法
getAppointmentsData()
,该方法不会关闭光标,只会返回光标。现在构建光标适配器,如下所示

public CursorAdapter myCursorAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    //... all your stuff
    myCursorAdapter = new CursorAdapter(this, getAppointmentsData());
}
现在,将游标适配器传递给ListView,在此阶段,ListView可以使用基础游标(因为它仍然有效,如中所示,未关闭:p)。然后,当您确定应用程序不再需要游标时,关闭它。我建议在您的活动被破坏时执行此操作

@Override
public void onDestroy() {
   myCursorAdapter.getCursor().close(); 
}

你应该能够做到以下几点

if (c.moveToFirst()){
    return c;
}
原因是,
query()
方法不会返回null。它只会返回一个空游标。因此,不需要检查其是否为null。此外,
moveToFirst()
如果无法移动到第一行(因此,如果游标为空),则计算结果为false。因此,计数检查是多余的

但是,您确定从方法返回null是安全的吗?如果没有结果,您将明确返回null。此外,您是否知道在返回后不会调用
close()
方法(如果您有带结果的游标)

我不完全知道你如何处理返回的游标,但是我建议你只返回它,但是我怀疑你想要的只是

public Cursor getAppointmentsData() {
    String[] columns = new String[] { KEY_ROWAPPID, KEY_NAMEAPP,
            KEY_TYPEAPP, KEY_TIMEAPP, KEY_DATEAPP, KEY_COMMENTAPP };
    return ourDatabase.query(DATABASE_TABLEAPP, columns, null, null,
            null, null, KEY_NAMEAPP + " ASC", null);
}
更新-关于何时关闭光标

如果在返回光标之前关闭光标,那么方法
getAppointmentsData()
将返回一个关闭的光标。我很确定这不是您想要的。因为在这个阶段,您还没有完成光标的操作,所以现在自己清理还为时过早:)

首先,使用我上面建议的方法
getAppointmentsData()
,该方法不会关闭光标,只会返回光标。现在构建光标适配器,如下所示

public CursorAdapter myCursorAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    //... all your stuff
    myCursorAdapter = new CursorAdapter(this, getAppointmentsData());
}
现在,将游标适配器传递给ListView,在此阶段,ListView可以使用基础游标(因为它仍然有效,如中所示,未关闭:p)。然后,当您确定应用程序不再需要游标时,关闭它。我建议在您的活动被破坏时执行此操作

@Override
public void onDestroy() {
   myCursorAdapter.getCursor().close(); 
}

这是一个很好的解释。老实说,我不知道如果没有触发'if'语句,只会返回一个空游标。当我在方法的底部有返回类型'null'时,我知道我会遇到麻烦。我将实现这一点,并看看如何进行。我正在类中打开和关闭数据库这调用了此游标方法。仍然需要通过c.close()关闭我的游标,对吗?是的,请在使用完游标后将其关闭。在返回后不要关闭,因为在返回后不会计算任何内容(而且,显然在这一阶段您还没有使用完实例。如果在何处使用,则不会从方法返回它:))再次感谢您的回答。我已将我的新方法添加到我的原始问题中。如果您能检查一下,那将非常好。在返回光标之前,我已添加了光标关闭对象。我将在我的答案中添加另一个部分。这是一个很好的解释。我必须诚实地说,我不知道只返回一个空光标d如果没有触发'if'状态。当我在方法底部有返回类型'null'时,我知道我会遇到麻烦。我将实现这一点,并看看如何进行。我正在类中打开和关闭调用此游标方法的数据库。通过c.close()关闭我的游标是否仍然是必需的?是的,请在完成后关闭它。不要在返回后关闭,因为返回后不会进行任何计算(而且,很明显,您在这一阶段还没有完成实例的处理。如果您在何处,您不会从方法返回它:)。再次感谢您的回答。我已经添加了我的