0

我正在尝试修复我整天都在与之斗争的“最终确定”错误。在我尝试了许多不同的数据库和 cursor'.close()' 方法后,这个问题仍然存在。

显示的代码是它现在的样子。如果有人可以指导我以正确的方式关闭我的光标和数据库,那就太好了,因为目前如果我关闭一个,它似乎与另一个冲突!

目前,我正在尝试使用从对话框列表的 Intent 调用的“AddAppointmentContact”类的“onCreate”方法中设置的对象方法中设置的对象方法设置一个“EditText”。

目前我收到此错误:

错误:

02-01 21:23:18.947: E/Cursor(274): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.example.flybase2/databases/persons_name, table = contactsTable, query = SELECT _id, persons_name, persons_telephone, persons_email, persons_comments FROM contactsTable WHER

我在我的代码中的其他地方运行类似的代码,这工作正常。

这是与我从包含对话框的列表视图中选择的名称 ID 捆绑在一起的代码:

else if (items[item].equals("Add Appointment")) {

Intent conAdd = new Intent("com.example.flybase2.AddAppointmentContact");
conAdd.putExtra("newpassedID", idToPass);
startActivity(conAdd);

以及打开的“AddAppointmentContact”类:

Bundle extras = getIntent().getExtras(); 
    sentID = extras.getLong("newPassedID"); 


    DBHandlerApp NameAppointPass = new DBHandlerApp(this, null, null);

    NameAppointPass.open();
    String nameReturned = NameAppointPass.getName(sentID);

    setName = (EditText) findViewById(R.id.inputAppName);
    setName.setText(nameReturned);

和 '.getName()' 方法:

public String getName(long passedID) {

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

        if(c != null && c.getCount() > 0)
        {
        c.moveToFirst();
        String name = c.getString(1);

        return name;
        }

        return null;
4

2 回答 2

0

您需要关闭光标。

c.close()在返回名称或 null 之前。

于 2013-02-01T21:43:51.973 回答
0

还同意您必须关闭您的Cursor. 试试这个:

    if(c != null) {
        if(c.getCount() > 0 && c.moveToFirst())
        {
            String name = c.getString(1);
            c.close();
            return name;
        }
        c.close();
    }
    return null;
于 2013-02-01T22:47:55.903 回答