2013-02-01 37 views
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; 

回答

0

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

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

您需要关闭游标。

c.close()返回name或null之前。