0

I have developed sqlite database connection with a simple app. But when I try to run my app it shows “unfortunately app has stopped”. My DB consist of all insert , update, delete operations. I have posted all my codes and logcat errors also.

databasehandler.java

package com.example.database;

import java.util.ArrayList;
import java.util.List;

import com.example.androidsqlite.Contact;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class DatabaseHandler extends Activity 
{
    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

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

    // Contacts table name
    private static final String TABLE_CONTACTS = "contact";

 // Contacts Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";
    private static final String KEY_PH_NO = "phone_number";

    public DatabaseHandler(Context context)
    {
        super();
    }

 // Creating Tables
    public void onCreate(SQLiteDatabase db)
    {
        String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
                + KEY_PH_NO + " TEXT" + ")";
        db.execSQL(CREATE_CONTACTS_TABLE);
    }
 // Upgrading database
    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);
    }

 // Adding new contact
    public void addContact(Contact contact) 
    {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName()); // Contact Name
        values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone Number

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

    }

    private SQLiteDatabase getWritableDatabase() {
        // TODO Auto-generated method stub
        return null;
    }

    // Getting single contact
    public Contact getContact(int id) 
    {

            SQLiteDatabase db = this.getWritableDatabase();

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


            if (cursor != null)
                cursor.moveToFirst();

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



    // Getting All Contacts
    public List<Contact> getAllContacts()
    {

            List<Contact> contactList = new ArrayList<Contact>();
            // 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 {
                    Contact contact = new Contact();
                    contact.setID(Integer.parseInt(cursor.getString(0)));
                    contact.setName(cursor.getString(1));
                    contact.setPhoneNumber(cursor.getString(2));
                    // Adding contact to list
                    contactList.add(contact);
                } while (cursor.moveToNext());
            }

            // return contact list
            return contactList;
        }


    // Getting contacts Count
    public int getContactsCount() 
    {

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

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

    // Updating single contact
    public int updateContact(Contact contact)
    {

            SQLiteDatabase db = this.getWritableDatabase();

            ContentValues values = new ContentValues();
            values.put(KEY_NAME, contact.getName());
            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 deleteContact(Contact contact) 
    {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getID()) });
        db.close();
    }




}

logcat errors

02-13 12:51:59.280: D/Insert:(793): Inserting ..
02-13 12:51:59.300: D/AndroidRuntime(793): Shutting down VM
02-13 12:51:59.300: W/dalvikvm(793): threadid=1: thread exiting with uncaught exception (group=0xb4ac0b90)
02-13 12:51:59.320: E/AndroidRuntime(793): FATAL EXCEPTION: main
02-13 12:51:59.320: E/AndroidRuntime(793): Process: com.example.database, PID: 793
02-13 12:51:59.320: E/AndroidRuntime(793): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.database/com.example.database.MainActivity}: java.lang.NullPointerException
02-13 12:51:59.320: E/AndroidRuntime(793):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
02-13 12:51:59.320: E/AndroidRuntime(793):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
02-13 12:51:59.320: E/AndroidRuntime(793):  at android.app.ActivityThread.access$700(ActivityThread.java:135)
02-13 12:51:59.320: E/AndroidRuntime(793):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
02-13 12:51:59.320: E/AndroidRuntime(793):  at android.os.Handler.dispatchMessage(Handler.java:102)
02-13 12:51:59.320: E/AndroidRuntime(793):  at android.os.Looper.loop(Looper.java:137)
02-13 12:51:59.320: E/AndroidRuntime(793):  at android.app.ActivityThread.main(ActivityThread.java:4998)
02-13 12:51:59.320: E/AndroidRuntime(793):  at java.lang.reflect.Method.invokeNative(Native Method)
02-13 12:51:59.320: E/AndroidRuntime(793):  at java.lang.reflect.Method.invoke(Method.java:515)
02-13 12:51:59.320: E/AndroidRuntime(793):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
02-13 12:51:59.320: E/AndroidRuntime(793):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
02-13 12:51:59.320: E/AndroidRuntime(793):  at dalvik.system.NativeStart.main(Native Method)
02-13 12:51:59.320: E/AndroidRuntime(793): Caused by: java.lang.NullPointerException
02-13 12:51:59.320: E/AndroidRuntime(793):  at com.example.database.DatabaseHandler.addContact(DatabaseHandler.java:64)
02-13 12:51:59.320: E/AndroidRuntime(793):  at com.example.database.MainActivity.onCreate(MainActivity.java:26)
02-13 12:51:59.320: E/AndroidRuntime(793):  at android.app.Activity.performCreate(Activity.java:5243)
02-13 12:51:59.320: E/AndroidRuntime(793):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-13 12:51:59.320: E/AndroidRuntime(793):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
02-13 12:51:59.320: E/AndroidRuntime(793):  ... 11 more
02-13 12:53:25.212: I/Process(793): Sending signal. PID: 793 SIG: 9
02-13 12:53:34.512: D/Insert:(1053): Inserting ..
02-13 12:53:34.512: D/AndroidRuntime(1053): Shutting down VM
02-13 12:53:34.522: W/dalvikvm(1053): threadid=1: thread exiting with uncaught exception (group=0xb4ac0b90)
02-13 12:53:34.522: E/AndroidRuntime(1053): FATAL EXCEPTION: main
02-13 12:53:34.522: E/AndroidRuntime(1053): Process: com.example.database, PID: 1053
02-13 12:53:34.522: E/AndroidRuntime(1053): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.database/com.example.database.MainActivity}: java.lang.NullPointerException
02-13 12:53:34.522: E/AndroidRuntime(1053):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
02-13 12:53:34.522: E/AndroidRuntime(1053):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
02-13 12:53:34.522: E/AndroidRuntime(1053):     at android.app.ActivityThread.access$700(ActivityThread.java:135)
02-13 12:53:34.522: E/AndroidRuntime(1053):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
02-13 12:53:34.522: E/AndroidRuntime(1053):     at android.os.Handler.dispatchMessage(Handler.java:102)
02-13 12:53:34.522: E/AndroidRuntime(1053):     at android.os.Looper.loop(Looper.java:137)
02-13 12:53:34.522: E/AndroidRuntime(1053):     at android.app.ActivityThread.main(ActivityThread.java:4998)
02-13 12:53:34.522: E/AndroidRuntime(1053):     at java.lang.reflect.Method.invokeNative(Native Method)
02-13 12:53:34.522: E/AndroidRuntime(1053):     at java.lang.reflect.Method.invoke(Method.java:515)
02-13 12:53:34.522: E/AndroidRuntime(1053):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
02-13 12:53:34.522: E/AndroidRuntime(1053):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
02-13 12:53:34.522: E/AndroidRuntime(1053):     at dalvik.system.NativeStart.main(Native Method)
02-13 12:53:34.522: E/AndroidRuntime(1053): Caused by: java.lang.NullPointerException
02-13 12:53:34.522: E/AndroidRuntime(1053):     at com.example.database.DatabaseHandler.addContact(DatabaseHandler.java:64)
02-13 12:53:34.522: E/AndroidRuntime(1053):     at com.example.database.MainActivity.onCreate(MainActivity.java:26)
02-13 12:53:34.522: E/AndroidRuntime(1053):     at android.app.Activity.performCreate(Activity.java:5243)
02-13 12:53:34.522: E/AndroidRuntime(1053):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-13 12:53:34.522: E/AndroidRuntime(1053):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
02-13 12:53:34.522: E/AndroidRuntime(1053):     ... 11 more
02-13 12:53:36.882: I/Process(1053): Sending signal. PID: 1053 SIG: 9
codeMagic
  • 44,549
  • 13
  • 77
  • 93
  • Please separate files when posting so its easier for us to see, otherwise it all runs together. Also, this is a code dump. You need to think about the most logical place of the error, along with looking at the logcat, so you post only the most relevant parts of the code, Now, what is at line 64 of `DatabaseHandler`? Something there is `null`. – codeMagic Feb 13 '14 at 18:04
  • Is it a typo that your `DatabaseHandler` extends `Activity`. According to the documentation this should be `SQLiteOpenHelper`. – matcauthon Feb 13 '14 at 18:06
  • [See this example](http://stackoverflow.com/questions/16782558/what-is-the-best-way-to-debug-the-android-code-in-eclipse/16782621#16782621) about reading logcat if you don't know how. It will make life much simpler. – codeMagic Feb 13 '14 at 18:07
  • @codeMagic , could you pls make changes and post it... pls – user3295933 Feb 13 '14 at 18:07

2 Answers2

1

Take a look at this string:

SQLiteDatabase db = this.getWritableDatabase();

You haven't implemented getWritableDatabase() method, that is why your db is null

EDIT OK, your DatabaseHandler is written in a wrong way. It should extend SQLiteOpenHelper. In such a case, the basic example of a handler with your getWritableDatabase function added is the following:

public class DBWorker extends SQLiteOpenHelper {

    private static String DB_PATH = "/data/data/<your app>/databases/";
    private static String DB_NAME = "db.sqlite";
    private SQLiteDatabase myDataBase;
    private final Context myContext;

    public DBWorker(Context context) {
        super(context, DB_NAME, null, 1);
        this.myContext = context;
    }

    public void getWritableDatabase() throws SQLException {

        //Open the database
        String myPath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);

    }

    @Override
    public synchronized void close() {

        if(myDataBase != null)
            myDataBase.close();
        super.close();

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
       //do the stuff
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
       //do the stuff
    }
}
nikis
  • 11,166
  • 2
  • 35
  • 45
0

You have not initialized something and that thing is causing crash . See this error:

Caused by: java.lang.NullPointerException

Go through the code and see which variable is not initialized

Shahzeb
  • 3,696
  • 4
  • 28
  • 47