0

Hi in my application it's showing errors.My application running in all the emulators except one if running means it's showing log cat errors can anyone please tell me how to resolve my issues.

DatabaseHandlers class

public class DatabaseHandlers extends SQLiteOpenHelper {

    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "FristRegistrationManager";

    // GSfeedbacks table name
    private static final String TABLE_CONTACTS = "firstregistration";

    // GSfeedbacks Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";
    private static final String KEY_EMAIL = "email";
    private static final String KEY_PH_NO = "number";


    public DatabaseHandlers(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," + KEY_EMAIL + " TEXT,"
                + KEY_PH_NO + " TEXT" + ")";
        db.execSQL(CREATE_CONTACTS_TABLE);
    }

    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

        // Create tables again
        onCreate(db);
    }

    /**
     * All CRUD(Create, Read, Update, Delete) Operations
     */

    // Adding new contact
    void addGSfeedback(GSfeedback contact) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName()); // GSfeedback Name
        values.put(KEY_EMAIL, contact.getEmail()); // GSfeedback Name
        values.put(KEY_PH_NO, contact.getPhoneNumber()); // GSfeedback Phone    

        // Inserting Row
        db.insert(TABLE_CONTACTS, null, values);
        db.close(); // Closing database connection
    }

    // Getting single contact
    GSfeedback getGSfeedback(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
                KEY_NAME,KEY_EMAIL, KEY_PH_NO }, KEY_ID + "=?",
                new String[] { String.valueOf(id) }, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        GSfeedback contact = new GSfeedback(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2),cursor.getString(3));
        // return contact
        return contact;
    }

    // Getting All GSfeedbacks
    public ArrayList<GSfeedback> getAllGSfeedbacks() {
        ArrayList<GSfeedback> contactList = new ArrayList<GSfeedback>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                GSfeedback contact = new GSfeedback();
                contact.setID(Integer.parseInt(cursor.getString(0)));
                contact.setName(cursor.getString(1));
                contact.setEmail(cursor.getString(2));
                contact.setPhoneNumber(cursor.getString(3));    
                // Adding contact to list
                contactList.add(contact);
            } while (cursor.moveToNext());
        }

        // return contact list
        return contactList;
    }

    // Updating single contact
    public int updateGSfeedback(GSfeedback contact) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName());
        values.put(KEY_EMAIL, contact.getEmail());
        values.put(KEY_PH_NO, contact.getPhoneNumber());    

        // updating row
        return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getID()) });
    }

    // Deleting single contact
    public void deleteGSfeedback(GSfeedback contact) {
        SQLiteDatabase db = this.getWritableDatabase();
        //db.delete(TABLE_CONTACTS, KEY_ID + " = ?", new String[] { String.valueOf(contact.getID()) });
        db.delete(TABLE_CONTACTS, null, null);
        db.close();
    }


    // Getting contacts Count
    public int getGSfeedbacksCount() {
        String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();

        // return count
        return cursor.getCount();
    }


}

logcat

06-24 19:01:00.203: E/Database(592): close() was never explicitly called on database '/data/data/com.agilerise.hotel/databases/FristRegistrationManager' 
06-24 19:01:00.203: E/Database(592): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
06-24 19:01:00.203: E/Database(592):    at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1847)
06-24 19:01:00.203: E/Database(592):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
06-24 19:01:00.203: E/Database(592):    at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854)
06-24 19:01:00.203: E/Database(592):    at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:847)
06-24 19:01:00.203: E/Database(592):    at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:547)
06-24 19:01:00.203: E/Database(592):    at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
06-24 19:01:00.203: E/Database(592):    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
06-24 19:01:00.203: E/Database(592):    at com.agilerise.hotel.DatabaseHandlers.getAllGSfeedbacks(DatabaseHandlers.java:92)
06-24 19:01:00.203: E/Database(592):    at com.agilerise.hotel.First.onCreate(First.java:22)
06-24 19:01:00.203: E/Database(592):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-24 19:01:00.203: E/Database(592):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
06-24 19:01:00.203: E/Database(592):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
06-24 19:01:00.203: E/Database(592):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
06-24 19:01:00.203: E/Database(592):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
06-24 19:01:00.203: E/Database(592):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-24 19:01:00.203: E/Database(592):    at android.os.Looper.loop(Looper.java:130)
06-24 19:01:00.203: E/Database(592):    at android.app.ActivityThread.main(ActivityThread.java:3683)
06-24 19:01:00.203: E/Database(592):    at java.lang.reflect.Method.invokeNative(Native Method)
06-24 19:01:00.203: E/Database(592):    at java.lang.reflect.Method.invoke(Method.java:507)
06-24 19:01:00.203: E/Database(592):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-24 19:01:00.203: E/Database(592):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-24 19:01:00.203: E/Database(592):    at dalvik.system.NativeStart.main(Native Method)
user3739863
  • 41
  • 1
  • 9
  • 1
    possible duplicate of [Closing the database in a ContentProvider](http://stackoverflow.com/questions/4547461/closing-the-database-in-a-contentprovider) – Pararth Jun 24 '14 at 13:45

2 Answers2

0

try to close all cursors when you are done or manage them

close: cursor.close()

managed cursor startManagingCursor(cursor)

Think this should help you!

A.S.
  • 4,574
  • 3
  • 26
  • 43
  • after you are done with the cursor `cursor.close()` (eg at the end of the method), and the `startManagingCursor(cursor)` before you do something with the cursor – A.S. Jun 24 '14 at 13:48
  • hi startManagingCursor(cursor) what is thi – user3739863 Jun 25 '14 at 06:49
0

When you open your table and cursor then you must have to close it bcz avoid any potential memory leaks so you should always be closed when no longer used. Try below code:-

cursor.close();
duggu
  • 37,851
  • 12
  • 116
  • 113