I have a database table which has a column with the name “notes”.
This column’s data get only “yes” or “no” depending if the specific row is my favorite or not (add to favorites).
I am trying to update this column’s data with the following code:
public void updateFavorite(long id)
{
String txt;
System.out.println("first");
Cursor c = database.query("recipes", null, "_id=" + id, null, null, null, null);
c.moveToFirst();
System.out.println("second");
int notesIndex = c.getColumnIndex("notes");
System.out.println("third");
String fav=c.getString(notesIndex);
System.out.println("fourth");
System.out.println(fav);
if (fav=="yes") {txt="no";}
else {txt="yes";}
ContentValues editEsoda = new ContentValues();
editEsoda.put("notes", txt);
open(); // open the database
database.update("recipes", editEsoda, "_id=" + id, null);
close(); // close the database
c.close();
}
I am getting an error when trying to retrieve the Cursor c:
Cursor c = database.query("recipes", null, "_id=" + id, null, null, null, null);
I want to read the string at this row and column. If it is “yes” then turn it to “no”. Otherwise if it is “no” then turn it to “yes”.
Why am i getting an error there?
Thank you in advance
This is my LogCat:
11-26 19:00:25.404: D/dalvikvm(30378): GC_FOR_MALLOC freed 4678 objects / 265896 bytes in 79ms
11-26 19:00:25.444: I/System.out(30378): first
11-26 19:00:25.444: D/AndroidRuntime(30378): Shutting down VM
11-26 19:00:25.444: W/dalvikvm(30378): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
11-26 19:00:25.454: E/AndroidRuntime(30378): FATAL EXCEPTION: main
11-26 19:00:25.454: E/AndroidRuntime(30378): java.lang.IllegalStateException: Could not execute method of the activity
11-26 19:00:25.454: E/AndroidRuntime(30378): at android.view.View$1.onClick(View.java:2072)
11-26 19:00:25.454: E/AndroidRuntime(30378): at android.view.View.performClick(View.java:2408)
11-26 19:00:25.454: E/AndroidRuntime(30378): at android.view.View$PerformClick.run(View.java:8816)
11-26 19:00:25.454: E/AndroidRuntime(30378): at android.os.Handler.handleCallback(Handler.java:587)
11-26 19:00:25.454: E/AndroidRuntime(30378): at android.os.Handler.dispatchMessage(Handler.java:92)
11-26 19:00:25.454: E/AndroidRuntime(30378): at android.os.Looper.loop(Looper.java:123)
11-26 19:00:25.454: E/AndroidRuntime(30378): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-26 19:00:25.454: E/AndroidRuntime(30378): at java.lang.reflect.Method.invokeNative(Native Method)
11-26 19:00:25.454: E/AndroidRuntime(30378): at java.lang.reflect.Method.invoke(Method.java:521)
11-26 19:00:25.454: E/AndroidRuntime(30378): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-26 19:00:25.454: E/AndroidRuntime(30378): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-26 19:00:25.454: E/AndroidRuntime(30378): at dalvik.system.NativeStart.main(Native Method)
11-26 19:00:25.454: E/AndroidRuntime(30378): Caused by: java.lang.reflect.InvocationTargetException
11-26 19:00:25.454: E/AndroidRuntime(30378): at development.nk.cretanrecipes.ViewRecipes.favorite(ViewRecipes.java:235)
11-26 19:00:25.454: E/AndroidRuntime(30378): at java.lang.reflect.Method.invokeNative(Native Method)
11-26 19:00:25.454: E/AndroidRuntime(30378): at java.lang.reflect.Method.invoke(Method.java:521)
11-26 19:00:25.454: E/AndroidRuntime(30378): at android.view.View$1.onClick(View.java:2067)
11-26 19:00:25.454: E/AndroidRuntime(30378): ... 11 more
11-26 19:00:25.454: E/AndroidRuntime(30378): Caused by: java.lang.NullPointerException
11-26 19:00:25.454: E/AndroidRuntime(30378): at development.nk.cretanrecipes.DatabaseConnector.updateFavorite(DatabaseConnector.java:93)
11-26 19:00:25.454: E/AndroidRuntime(30378): ... 15 more
11-26 19:00:29.094: I/Process(30378): Sending signal. PID: 30378 SIG: 9
That means the
databaseisnull, you need to usedatabase = helper.getWritableDatabase()before this line and replacehelperwith yourSQLiteOpenHelpervariable. I’m guessing this is whatopen()does.Along with what the others have said lets make this method a little faster: