7

したがって、基本的にDBに2回クエリを実行しています。DBをどこにも閉じていないため、このエラーが実際にどこから来ているのかわかりません。エラーを返すコードは次のように実行されます。調べてみると、私のようなケースを見たばかりです。

BeaconHandler pullAllDB = new BeaconHandler(this);
    try {
        List<Beacon> beaconsShown = pullAllDB.getAllBeacons();
        for (final Beacon bn : beaconsShown) {
            try {
                int messageCount = pullAllDB.getMessageCount();
                Log.d("Message", messageCount + " Messages Found");
                if (messageCount > 0) {
                    //Do Something
                } else {
                    // Do Nothing
                }
            } 
            catch (Exception e) {
                e.getStackTrace();
                Log.e("Message", e.getMessage());
            }
        }
    }

そして、クエリを実行するコード...

public int getBeaconsCount() {

    String countQuery = "SELECT * FROM " + TABLE_BASIC_BEACON;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    cursor.close();

    // return count
    return cursor.getCount();

}

public int getMessageCount() {

    String mcountQuery = "SELECT * FROM " + MESSAGE_BEACON;
    SQLiteDatabase mdb = this.getReadableDatabase();
    Cursor mcursor = mdb.rawQuery(mcountQuery, null);
    mcursor.close();

    // return count
    return mcursor.getCount();

}
4

2 に答える 2

21

エラーが発生した場合は、logcat を投稿する必要があります。問題の原因となっている行を特定するのに役立ちます。

Android ドキュメントから。

近い()

Cursor を閉じて、すべてのリソースを解放し、完全に無効にします。

mcursor.getCount()閉じた後の呼び出しがエラーを引き起こしている可能性があります

たぶん、このようなことを試してみてください。

int count = mcursor.getCount();
mcursor.close();

// return count
return count ;
于 2013-09-20T00:02:45.200 に答える