Reputation: 221
Searched a whole bunch of the same question and i couldn't get an idea why i get NPE. Pls help.
My code to read data from a table is,
private String []cols = {"name","id"};
public void seeRecord(String a, int b){
Cursor c = db.rawQuery("select * from vijay", null);
c.moveToFirst();
while(c.moveToNext()){
String nameintable = c.getString(c.getColumnIndex(cols[0]));
int idintable = c.getInt(c.getColumnIndex(cols[1]));
a=nameintable;
b=idintable;
}
c.close();
}
To insert data to the table is:
public void addRecord(String name, int id){
db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name",name);
values.put("id", id);
db.insert("vijay", null, values);
db.close();
}
logcat errors:
07-30 12:11:34.755: E/AndroidRuntime(15894): FATAL EXCEPTION: main
07-30 12:11:34.755: E/AndroidRuntime(15894): java.lang.IllegalStateException: Could not execute method of the activity
07-30 12:11:34.755: E/AndroidRuntime(15894): at android.view.View$1.onClick(View.java:2072)
07-30 12:11:34.755: E/AndroidRuntime(15894): at android.view.View.performClick(View.java:2408)
07-30 12:11:34.755: E/AndroidRuntime(15894): at android.view.View$PerformClick.run(View.java:8816)
07-30 12:11:34.755: E/AndroidRuntime(15894): at android.os.Handler.handleCallback(Handler.java:587)
07-30 12:11:34.755: E/AndroidRuntime(15894): at android.os.Handler.dispatchMessage(Handler.java:92)
07-30 12:11:34.755: E/AndroidRuntime(15894): at android.os.Looper.loop(Looper.java:123)
07-30 12:11:34.755: E/AndroidRuntime(15894): at android.app.ActivityThread.main(ActivityThread.java:4627)
07-30 12:11:34.755: E/AndroidRuntime(15894): at java.lang.reflect.Method.invokeNative(Native Method)
07-30 12:11:34.755: E/AndroidRuntime(15894): at java.lang.reflect.Method.invoke(Method.java:521)
07-30 12:11:34.755: E/AndroidRuntime(15894): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-30 12:11:34.755: E/AndroidRuntime(15894): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-30 12:11:34.755: E/AndroidRuntime(15894): at dalvik.system.NativeStart.main(Native Method)
07-30 12:11:34.755: E/AndroidRuntime(15894): Caused by: java.lang.reflect.InvocationTargetException
07-30 12:11:34.755: E/AndroidRuntime(15894): at com.example.databaseaccess.MainActivity.see(MainActivity.java:42)
07-30 12:11:34.755: E/AndroidRuntime(15894): at java.lang.reflect.Method.invokeNative(Native Method)
07-30 12:11:34.755: E/AndroidRuntime(15894): at java.lang.reflect.Method.invoke(Method.java:521)
07-30 12:11:34.755: E/AndroidRuntime(15894): at android.view.View$1.onClick(View.java:2067)
07-30 12:11:34.755: E/AndroidRuntime(15894): ... 11 more
07-30 12:11:34.755: E/AndroidRuntime(15894): Caused by: java.lang.NullPointerException
07-30 12:11:34.755: E/AndroidRuntime(15894): at com.example.databaseaccess.DbHelper.seeRecord(DbHelper.java:61)
07-30 12:11:34.755: E/AndroidRuntime(15894): ... 15 more
07-30 12:23:40.606: E/AndroidRuntime(18817): FATAL EXCEPTION: main
07-30 12:23:40.606: E/AndroidRuntime(18817): java.lang.IllegalStateException: Could not execute method of the activity
07-30 12:23:40.606: E/AndroidRuntime(18817): at android.view.View$1.onClick(View.java:2072)
07-30 12:23:40.606: E/AndroidRuntime(18817): at android.view.View.performClick(View.java:2408)
07-30 12:23:40.606: E/AndroidRuntime(18817): at android.view.View$PerformClick.run(View.java:8816)
07-30 12:23:40.606: E/AndroidRuntime(18817): at android.os.Handler.handleCallback(Handler.java:587)
07-30 12:23:40.606: E/AndroidRuntime(18817): at android.os.Handler.dispatchMessage(Handler.java:92)
07-30 12:23:40.606: E/AndroidRuntime(18817): at android.os.Looper.loop(Looper.java:123)
07-30 12:23:40.606: E/AndroidRuntime(18817): at android.app.ActivityThread.main(ActivityThread.java:4627)
07-30 12:23:40.606: E/AndroidRuntime(18817): at java.lang.reflect.Method.invokeNative(Native Method)
07-30 12:23:40.606: E/AndroidRuntime(18817): at java.lang.reflect.Method.invoke(Method.java:521)
07-30 12:23:40.606: E/AndroidRuntime(18817): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-30 12:23:40.606: E/AndroidRuntime(18817): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-30 12:23:40.606: E/AndroidRuntime(18817): at dalvik.system.NativeStart.main(Native Method)
07-30 12:23:40.606: E/AndroidRuntime(18817): Caused by: java.lang.reflect.InvocationTargetException
07-30 12:23:40.606: E/AndroidRuntime(18817): at com.example.databaseaccess.MainActivity.see(MainActivity.java:42)
07-30 12:23:40.606: E/AndroidRuntime(18817): at java.lang.reflect.Method.invokeNative(Native Method)
07-30 12:23:40.606: E/AndroidRuntime(18817): at java.lang.reflect.Method.invoke(Method.java:521)
07-30 12:23:40.606: E/AndroidRuntime(18817): at android.view.View$1.onClick(View.java:2067)
07-30 12:23:40.606: E/AndroidRuntime(18817): ... 11 more
07-30 12:23:40.606: E/AndroidRuntime(18817): Caused by: java.lang.NullPointerException
07-30 12:23:40.606: E/AndroidRuntime(18817): at com.example.databaseaccess.DbHelper.seeRecord(DbHelper.java:61)
07-30 12:23:40.606: E/AndroidRuntime(18817): ... 15 more
07-30 12:23:49.245: E/AndroidRuntime(18861): FATAL EXCEPTION: main
07-30 12:23:49.245: E/AndroidRuntime(18861): java.lang.IllegalStateException: Could not execute method of the activity
07-30 12:23:49.245: E/AndroidRuntime(18861): at android.view.View$1.onClick(View.java:2072)
07-30 12:23:49.245: E/AndroidRuntime(18861): at android.view.View.performClick(View.java:2408)
07-30 12:23:49.245: E/AndroidRuntime(18861): at android.view.View$PerformClick.run(View.java:8816)
07-30 12:23:49.245: E/AndroidRuntime(18861): at android.os.Handler.handleCallback(Handler.java:587)
07-30 12:23:49.245: E/AndroidRuntime(18861): at android.os.Handler.dispatchMessage(Handler.java:92)
07-30 12:23:49.245: E/AndroidRuntime(18861): at android.os.Looper.loop(Looper.java:123)
07-30 12:23:49.245: E/AndroidRuntime(18861): at android.app.ActivityThread.main(ActivityThread.java:4627)
07-30 12:23:49.245: E/AndroidRuntime(18861): at java.lang.reflect.Method.invokeNative(Native Method)
07-30 12:23:49.245: E/AndroidRuntime(18861): at java.lang.reflect.Method.invoke(Method.java:521)
07-30 12:23:49.245: E/AndroidRuntime(18861): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-30 12:23:49.245: E/AndroidRuntime(18861): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-30 12:23:49.245: E/AndroidRuntime(18861): at dalvik.system.NativeStart.main(Native Method)
07-30 12:23:49.245: E/AndroidRuntime(18861): Caused by: java.lang.reflect.InvocationTargetException
07-30 12:23:49.245: E/AndroidRuntime(18861): at com.example.databaseaccess.MainActivity.see(MainActivity.java:42)
07-30 12:23:49.245: E/AndroidRuntime(18861): at java.lang.reflect.Method.invokeNative(Native Method)
07-30 12:23:49.245: E/AndroidRuntime(18861): at java.lang.reflect.Method.invoke(Method.java:521)
07-30 12:23:49.245: E/AndroidRuntime(18861): at android.view.View$1.onClick(View.java:2067)
07-30 12:23:49.245: E/AndroidRuntime(18861): ... 11 more
07-30 12:23:49.245: E/AndroidRuntime(18861): Caused by: java.lang.IllegalStateException: database not open
07-30 12:23:49.245: E/AndroidRuntime(18861): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1333)
07-30 12:23:49.245: E/AndroidRuntime(18861): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1315)
07-30 12:23:49.245: E/AndroidRuntime(18861): at com.example.databaseaccess.DbHelper.seeRecord(DbHelper.java:61)
07-30 12:23:49.245: E/AndroidRuntime(18861): ... 15 more
both are called in onclick event of a button. Inserting works properly. But when clicking read button, app crashes. Where is the mistake?
Upvotes: 1
Views: 5230
Reputation: 24453
I always use this way:
public List<Ticket> getTickets() {
openDataBase();
Cursor cursor = myDataBase.rawQuery("Select * from ABC" , null);
while (cursor.moveToNext()) {
//parse data here
}
cursor.close();
closeDatabase();
return tickets;
}
In the case above codes don't fix your problem, please try this:
public List<Ticket> getTickets() {
openDataBase();
Cursor cursor = myDataBase.rawQuery("Select * from ABC" , null);
while (!cursor.isAfterLast()) {
cursor.moveToNext();
//parse data here
}
cursor.close();
closeDatabase();
return tickets;
}
Upvotes: 3
Reputation: 4382
Replace your code with this
public Cursor seeRecord()
{
db.open();
Cursor c = db.rawQuery("select * from vijay", null);
db.close();
return c;
}
write following code on your method where you want to upadte your view
db.open();
Cursor c = seeRecord();
c.moveToFirst();
while(!c.isAfterLast())
{
if(c != null)
{
String nameintable = c.getString(0);
int idintable = c.getInt(1);
Your_View.id.setText(nameintable);
Your_View.id.setText(idintable);
}
c.moveToNext();
}
c.close();
db.close();
Upvotes: 1
Reputation: 14199
try
public void seeRecord(String a, int b){
db = this.getWritableDatabase();
Cursor c = db.rawQuery("select * from vijay", null);
c.moveToFirst();
while(c.moveToNext()){
String nameintable = c.getString(c.getColumnIndex(cols[0]));
int idintable = c.getInt(c.getColumnIndex(cols[1]));
a=nameintable;
b=idintable;
}
c.close();
db.close();
}
Upvotes: 1
Reputation: 1856
Try this
public void seeRecord(String a, int b){
db = this.getReadableDatabase();
Cursor c = db.rawQuery("select * from vijay", null);
c.moveToFirst();
while(c.moveToNext()){
String nameintable = c.getString(c.getColumnIndex(cols[0]));
int idintable = c.getInt(c.getColumnIndex(cols[1]));
a=nameintable;
b=idintable;
}
c.close();
}
Upvotes: 3
Reputation: 723
You might want to post the logcat to make this debug easier. But based off that code I'm assuming your db is null.
In your insert you call these 2 methods.
db = this.getWritableDatabase();
db.close();
I'm assumming it's crashing on this line.
Cursor c = db.rawQuery("select * from vijay", null);
Which means you will need to reopen /close the database like you did in the insert.
Upvotes: 1