0

I have created a table in sqlite using an external Software and added to my project "assets" folder. So far its working, but when i try to insert a query line from my application, it shows Null pointer Exception. Below is my coding, Pls help me find out if there is any wrong statement.

DatabaseOpenHelper.java

public class DatabaseOpenHelper extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "peer.db";
private static final int DATABASE_VERSION = 1;

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

DatabaseAccess.java

public class DatabaseAccess {
private SQLiteOpenHelper openHelper;
private SQLiteDatabase database;
private static DatabaseAccess instance;
private Cursor cursor;
  private DatabaseAccess(Context context) {
    this.openHelper = new DatabaseOpenHelper(context);
}

public static DatabaseAccess getInstance(Context context) {
    if (instance == null) {
        instance = new DatabaseAccess(context);
    }
    return instance;
}

public void open() {

    this.database = openHelper.getWritableDatabase();
}

public void close() {
    if (database != null) {
        this.database.close();
    }
}

public List<String> getQuotes() {
    List<String> list = new ArrayList<>();
    cursor = database.rawQuery("SELECT * FROM peertable", null);
    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        list.add(cursor.getString(0));
        cursor.moveToNext();
    }
    cursor.close();
    return list;
}

}

MainActivity.java

public class MainActivity extends Activity {
public ListView listView;
Context context;
private SQLiteDatabase database;
private static final String COL_1 = "name";
private static final String COL_2 = "number";
private static final String TABLE_NAME = "peertable";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    this.listView = (ListView) findViewById(R.id.listView);

    DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);
    databaseAccess.open();
    ContentValues values = new ContentValues();
    values.put(COL_1, "Karthik");
    values.put(COL_2, 1237894560);
    database.insert(TABLE_NAME,null,values);

    List<String> data = databaseAccess.getQuotes();
    databaseAccess.close();

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
    this.listView.setAdapter(adapter);
}

}

In MainActivity, I am trying to insert the query.

Error Log:

 Process: com.synergy.externaldatabase, PID: 11828
                                               java.lang.RuntimeException: Unable to start activity ComponentInfo{com.synergy.externaldatabase/com.synergy.externaldatabase.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'long android.database.sqlite.SQLiteDatabase.insert(java.lang.String, java.lang.String, android.content.ContentValues)' on a null object reference
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2793)
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864)
                                                   at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567)
                                                   at android.os.Handler.dispatchMessage(Handler.java:105)
                                                   at android.os.Looper.loop(Looper.java:156)
                                                   at android.app.ActivityThread.main(ActivityThread.java:6523)
                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
                                                Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'long android.database.sqlite.SQLiteDatabase.insert(java.lang.String, java.lang.String, android.content.ContentValues)' on a null object reference
                                                   at com.synergy.externaldatabase.MainActivity.onCreate(MainActivity.java:43)
                                                   at android.app.Activity.performCreate(Activity.java:6915)
                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2746)
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864) 
                                                   at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567) 
                                                   at android.os.Handler.dispatchMessage(Handler.java:105) 
                                                   at android.os.Looper.loop(Looper.java:156) 
                                                   at android.app.ActivityThread.main(ActivityThread.java:6523) 
                                                   at java.lang.reflect.Method.invoke(Native Method) 
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942) 
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832) 
Peer Mohamed
  • 408
  • 4
  • 15

2 Answers2

0

You don't initialize database but use it here:

database.insert(TABLE_NAME,null,values);

The database field declared in DatabaseAccess is not the same as the one declared in MainActivity.

Henry
  • 42,982
  • 7
  • 68
  • 84
0

It should be

 databaseAccess.insert(TABLE_NAME,null,values);
sasikumar
  • 12,540
  • 3
  • 28
  • 48