When you see Eclipse stuck like this, just press Resume a few times, to let
the application crash (or recover) completely. Then check the logcat for a
message and a stack trace.
In this particular case, the code in getImgResource leaves the cursor open,
so there is a warning when it's finalized.
This is the pattern I use:
cursor = ... query ....
if (cursor != null) {
.... get column indices ...
while (cursor.moveToNext()) {
... get data using the column indices .....
}
cursor.close();
}
This works because a cursor's initial position is -1 (before the first
record).
-- Kostya
2011/6/14 Simon Platten <[email protected]>
> I have written a class 'clsDB', please see source below. I'm testing it in
> the emulator and the first time around it runs fine without error, then on
> the second run eclipse jumps into the Class File Editor for
> SQLiteCursor.class. The application continues to run without exception or
> error, but eclipse suggests everything isn't quite right.
>
> I have try / catch clauses everywhere I interact with the database and none
> seem to capture the fault. Looking at the Debug window, I can see an
> IllegalStateException thrown by SQLiteCursor.finalize() line:603, then
> NativeStart.run() line: not available [native method].
>
> This class encapsulates all my database activity.
>
>
> /**
> * File:
> * clsDB.java
> *
> * Notes:
> * Contains the class clsDB. This class manages the database SQLite
> interface
> *
> * Methods:
> * clsDB - Constructor
> * getImgResource - Returns a Image resource from database
> * getImgResources - Returns an array containing all image
> resource id's
> * insertResourceId - Insert resource identifier into database
> * onCreate - Called when database is created
> * onUpdate - Called when database is updated
>
>
> *******************************************************************************
> * History:
> * 12/06/2011 SP, Created class
> */
> package uk.co.cantley.avasig;
>
> import android.content.ContentValues;
> import android.content.Context;
> import android.database.Cursor;
> import android.database.sqlite.SQLiteDatabase;
> import android.database.sqlite.SQLiteOpenHelper;
> import android.util.Log;
>
> public class clsDB extends SQLiteOpenHelper {
> private static final String TAG = "clsDB";
>
> private static final int DB_VERSION = 1;
> private static final String DB_NAME = "avasig";
> private static final String TBL_IMG = "tblImgs";
> // Image fields
> private static final String IMG_ID = "imgID";
> private static final String IMG_RESID = "resID";
> /**
> * Constructor
> * @param context, the application context
> */
> public clsDB(Context context) {
> super( context, DB_NAME, null, DB_VERSION );
> }
> /**
> * Method:
> * getImgResource
> *
> * Parameters:
> * intResId, the image resource identifier
> *
> * Returns:
> * The record identifier
> */
> public int getImgResource( int intResId ) {
> try{
> SQLiteDatabase db = getWritableDatabase();
> Cursor cursor = db.rawQuery(
> "SELECT " +
> "* " +
> " FROM " +
> TBL_IMG +
> " WHERE " +
> IMG_RESID + "='" + intResId + "'",
> new String[] {} );
> if ( cursor != null ) {
> if ( cursor.moveToFirst() == true ) {
> int intColIdx = cursor.getColumnIndex( IMG_RESID );
> return cursor.getInt( intColIdx );
> }
> }
> } catch( Exception ex ) {
> Log.e(TAG, ex.getMessage() );
> }
> return -1;
> }
> /**
> * Method:
> * getImgResources
> *
> * Parameters:
> * none
> *
> * Returns:
> * An array of image resource identifiers
> */
> public int[] getImgResources() {
> try{
> SQLiteDatabase db = getWritableDatabase();
> Cursor cursor = db.rawQuery(
> "SELECT " +
> "* " +
> " FROM " +
> TBL_IMG,
> new String[] {} );
> if ( cursor != null ) {
> int intCount = cursor.getCount();
>
> if ( intCount > 0 ) {
> int[] aryResIds = new int[intCount];
> if( cursor.moveToFirst() == true ) {
> int intColIdx = cursor.getColumnIndex( IMG_RESID );
> int i = 0;
> do{
> aryResIds[i++] = cursor.getInt( intColIdx );
> } while( cursor.moveToNext() == true );
> }
> return aryResIds;
> }
> }
> } catch( Exception ex ) {
> Log.e(TAG, ex.getMessage() );
> }
> return null;
> }
> /**
> * Method:
> * insertResourceId
> *
> * Parameters:
> * intResId, the image resource identifier
> *
> * Returns:
> * The record identifier
> */
> public long insertResourceId( int intResId ) {
> try{
> int intTmp = getImgResource( intResId );
>
> if ( intTmp > 0 ) {
> // This record already exists, abort!
> return intResId;
> }
> SQLiteDatabase db = getWritableDatabase();
> ContentValues cv = new ContentValues();
> cv.put(IMG_RESID, intResId);
> return db.insertOrThrow(TBL_IMG, IMG_RESID, cv);
> } catch( Exception ex ) {
> Log.e(TAG, ex.getMessage() );
> }
> return -1;
> }
> /**
> * Method:
> * onCreate
> *
> * Parameters:
> * db, the database
> *
> * Returns:
> * none
> */
> @Override
> public void onCreate(SQLiteDatabase db) {
> db.execSQL( "CREATE TABLE " + TBL_IMG + " ( " +
> IMG_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
> IMG_RESID + " INTEGER NOT NULL )" );
> }
> /**
> * Method:
> * onUpgrade
> *
> * Parameters:
> * db, the database
> * intOld, the old version
> * intNew, the new version
> *
> * Returns:
> * none
> */
> @Override
> public void onUpgrade(SQLiteDatabase db, int intOld, int intNew) {
> db.execSQL( "DROP TABLE IF EXISTS " + TBL_IMG );
> onCreate( db );
> }
> }
>
>
> --
> Regards,
> Sy
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en