2013-12-11 1 views
-1

контекст: я могу получить записи с помощью других методов, таких как public Cursor getEntry(long rowId) и public Cursor getEntry(String category), но по какой-то причине public Cursor getAllEntries() не работает. Я получаю ошибку Cursor - Invalid statement in fillWindow()android.database.sqlite.SQLiteDatabase - невозможно получить все записи из базы данных

код:

//---retrieves all entries--- 
    public Cursor getAllEntries() throws SQLException 
    { 
     Log.d(BudgetConstants.DEBUG_TAG, "DBAdapter - DatabaseHelper - getAllEntries();"); 
     return db.query(DATABASE_TABLE, 
       new String[] { 
       KEY_ROWID, 
       KEY_TYPE, 
       KEY_DATE, 
       KEY_CATEGORY, 
       KEY_AMOUNT}, 
       null, null, null, null, null); 
    } 

полный код:
ListActivity (откуда я звоню дб) - http://pastebin.com/UGSvhsfd
DBAdapter (мой интерфейс к БД) - http://pastebin.com/jqtLiPHB
DBAdapter (мои друзья DBAdapter, который работает, как это должно быть) - http://pastebin.com/QTRF958d

EDIT1: код, где называется дб:

private void updateGUI(int displayScope) { 
     Cursor c; 
     ArrayList<Entry> entries;   // NOTE: making an Entry ArrayList due to the fact that rows in Cursors cannot be deleted 
     switch(displayScope) { 
     case BudgetConstants.DISPLAY_ALL: 
      c = getAllTransactions(); 
      //boolean b = c.moveToFirst(); 
      //Log.d(BudgetConstants.DEBUG_TAG, "movetofirst: "+b); 
      entries = extractEntries(c, BudgetConstants.FILTER_LIMIT_ALL); 
      displayEntries(entries); 
      break; 
     case BudgetConstants.DISPLAY_MONTH: 
      c = getAllTransactions(); 
      entries = extractEntries(c, BudgetConstants.FILTER_LIMIT_MONTH); 
      displayEntries(entries); 
      break; 
     } 
    } 

private ArrayList<Entry> extractEntries(Cursor c, int filter) { 
     ArrayList<Entry> res = new ArrayList<Entry>(); 
     Calendar cal = Calendar.getInstance(); 
     int currMonth = cal.get(Calendar.MONTH)+1; 
     int currYear = cal.get(Calendar.YEAR); 

     if (c.moveToFirst()) { // <------ getting an error here: Cursor - Invalid statement in fillWindow() 
      do { 
       if (filter==BudgetConstants.FILTER_LIMIT_MONTH) { 
        String entryDate = c.getString(BudgetConstants.DB_DATE); 
        int entryMonth = getMonth(entryDate); 
        int entryYear = getYear(entryDate); 
        if (!((entryMonth==currMonth) && (entryYear==currYear))) 
         continue; 
       } else if (filter==BudgetConstants.FILTER_LIMIT_ALL) 
        res.add(new Entry(c.getString(BudgetConstants.DB_DATE), c.getString(BudgetConstants.DB_TYPE), c.getString(BudgetConstants.DB_AMOUNT))); 
      } while (c.moveToNext()); 
     } 
     return res; 
    } 

ответ

0

Переехал db.close(); в последней строке private void displayEntries(ArrayList<Entry> entries), кажется, что сделал трюк.