2013-02-01 36 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之前。