I am making a note taking application where I make notes it gets stored in a Database
and I can edit and delete it so, I was just about to go on with my edit and delete adventure I thought I would run the app and see if its okay and it has just crashed.
Database Handler
package com.example.quicknotetaker;
import java.util.ArrayList;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DatabaseHandler extends SQLiteOpenHelper {
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "Qdatabase";
// Contacts table name
private static final String DATABASE_TABLE = "qtable";
// Contacts Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_TITLE = "title";
private static final String KEY_NOTE = "note";
private final ArrayList<Editablegetset> titlenoteslist = new ArrayList<Editablegetset>();
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_DATABASE_TABLE = "CREATE TABLE " + DATABASE_TABLE + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_TITLE + " TEXT,"
+ KEY_NOTE + " TEXT,)";
db.execSQL(CREATE_DATABASE_TABLE);
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
// Create tables again
onCreate(db);
}
/**
* All CRUD(Create, Read, Update, Delete) Operations
*/
// Adding new contact
public void Add_titlenotes(Editablegetset editablegetset) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_TITLE, editablegetset.getTitle()); // Contact Name
values.put(KEY_NOTE, editablegetset.getNote()); // Contact Phone
// Inserting Row
db.insert(DATABASE_TABLE, null, values);
db.close(); // Closing database connection
}
// Getting single data
Editablegetset Get_Set(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(DATABASE_TABLE, new String[] { KEY_ID,
KEY_TITLE, KEY_NOTE}, KEY_ID + "=?",
new String[] { String.valueOf(id) }, null, null, null);
if (cursor != null)
cursor.moveToFirst();
Editablegetset editablegetset = new Editablegetset(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2));
// return contact
cursor.close();
db.close();
return editablegetset;
}
// Getting All Contacts
public ArrayList<Editablegetset> Get_Set() {
try {
titlenoteslist.clear();
// Select All Query
String selectQuery = "SELECT * FROM " + DATABASE_TABLE;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Editablegetset editablegetset = new Editablegetset();
editablegetset.setID(Integer.parseInt(cursor.getString(0)));
editablegetset.setTitle(cursor.getString(1));
editablegetset.setNote(cursor.getString(2));
// Adding to list
titlenoteslist.add(editablegetset);
} while (cursor.moveToNext());
}
// return list
cursor.close();
db.close();
return titlenoteslist;
} catch (Exception e) {
// TODO: handle exception
Log.e("all title and notes", "" + e);
}
return titlenoteslist;
}
// Updating individual notes
public int Update_Contact(Editablegetset editablegetset) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_TITLE, editablegetset.getTitle());
values.put(KEY_NOTE, editablegetset.getNote());
// updating row
return db.update(DATABASE_TABLE, values, KEY_ID + " = ?",
new String[] { String.valueOf(editablegetset.getID()) });
}
// Deleting single notes
public void Delete_Contact(int id) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(DATABASE_TABLE, KEY_ID + " = ?",
new String[] { String.valueOf(id) });
db.close();
}
// Getting notes Count
public int totalnotes() {
String countQuery = "SELECT * FROM " + DATABASE_TABLE;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
cursor.close();
// return count
return cursor.getCount();
}
}
This is my main activity
package com.example.quicknotetaker;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Mainnote extends Activity {
DatabaseHandler db = new DatabaseHandler(this);
EditText edtitle, enotes;
Button ab;
int noteid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mainnote);
edtitle = (EditText) findViewById(R.id.title);
enotes = (EditText) findViewById(R.id.notes);
ab = (Button)findViewById(R.id.addnote);
ab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Editablegetset ed = db.Get_Set(noteid);
edtitle.setText(ed.getTitle());
enotes.setText(ed.getNote());
Toast.makeText(getApplicationContext(),
"Note has been Added", Toast.LENGTH_LONG).show();
Clear_Text();
}
public void Clear_Text() {
// TODO Auto-generated method stub
edtitle.getText().clear();
enotes.getText().clear();
}
});
}
}
This is my get set methods
package com.example.quicknotetaker;
public class Editablegetset {
// private variables
public int _id;
public String _title;
public String _note;
public Editablegetset() {
}
// constructor
public Editablegetset(int id, String title, String note) {
this._id = id;
this._title = title;
this._note = note;
}
// constructor
public Editablegetset(String title, String note) {
this._title = title;
this._note = note;
}
// getting ID
public int getID() {
return this._id;
}
// setting id
public void setID(int id) {
this._id = id;
}
// getting title
public String getTitle() {
return this._title;
}
// setting title
public void setTitle(String title) {
this._title = title;
}
// getting note
public String getNote() {
return this._note;
}
// setting note
public void setNote(String note) {
this._note = note;
}
}
Logcat
03-20 07:48:37.458: D/AndroidRuntime(23951): Shutting down VM
03-20 07:48:37.458: W/dalvikvm(23951): threadid=1: thread exiting with uncaught exception (group=0x4170ad40)
03-20 07:48:37.460: E/AndroidRuntime(23951): FATAL EXCEPTION: main
03-20 07:48:37.460: E/AndroidRuntime(23951): Process: com.example.quicknotetaker, PID: 23951
03-20 07:48:37.460: E/AndroidRuntime(23951): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.quicknotetaker/com.example.quicknotetaker.Mainnote}: java.lang.NullPointerException
03-20 07:48:37.460: E/AndroidRuntime(23951): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
03-20 07:48:37.460: E/AndroidRuntime(23951): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269)
03-20 07:48:37.460: E/AndroidRuntime(23951): at android.app.ActivityThread.access$800(ActivityThread.java:139)
03-20 07:48:37.460: E/AndroidRuntime(23951): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
03-20 07:48:37.460: E/AndroidRuntime(23951): at android.os.Handler.dispatchMessage(Handler.java:102)
03-20 07:48:37.460: E/AndroidRuntime(23951): at android.os.Looper.loop(Looper.java:136)
03-20 07:48:37.460: E/AndroidRuntime(23951): at android.app.ActivityThread.main(ActivityThread.java:5102)
03-20 07:48:37.460: E/AndroidRuntime(23951): at java.lang.reflect.Method.invokeNative(Native Method)
03-20 07:48:37.460: E/AndroidRuntime(23951): at java.lang.reflect.Method.invoke(Method.java:515)
03-20 07:48:37.460: E/AndroidRuntime(23951): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
03-20 07:48:37.460: E/AndroidRuntime(23951): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
03-20 07:48:37.460: E/AndroidRuntime(23951): at dalvik.system.NativeStart.main(Native Method)
03-20 07:48:37.460: E/AndroidRuntime(23951): Caused by: java.lang.NullPointerException
03-20 07:48:37.460: E/AndroidRuntime(23951): at com.example.quicknotetaker.Mainnote.onCreate(Mainnote.java:30)
03-20 07:48:37.460: E/AndroidRuntime(23951): at android.app.Activity.performCreate(Activity.java:5248)
03-20 07:48:37.460: E/AndroidRuntime(23951): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
03-20 07:48:37.460: E/AndroidRuntime(23951): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2173)
03-20 07:48:37.460: E/AndroidRuntime(23951): ... 11 more
Please i really need help i have spent a lot of time on this thanks
From the logcat:
Caused by: java.lang.NullPointerException
at com.example.quicknotetaker.Mainnote.onCreate(Mainnote.java:30)
Your onCreate()
can really NPE only in here:
ab.setOnClickListener(...);
when ab
is null. You initialize it with findViewById()
which returns null
in case the view was not found.
Make sure your activity_mainnote
layout really has a Button
with id addnote
.
The Value of "noteid" is 0, and you may not have a KEY_ID with value 0. The db query may returning no rows. So Editablegetset class is set null. so when u call edtitle.setText(ed.getTitle()); you will get NullPointerException because ed is null. Add a null check before getting values from Editablegetset class like below code
if(ed!=null)
{
edtitle.setText(ed.getTitle());
enotes.setText(ed.getNote());
}
Also set "noteid" correctly to match your db values.
Base on my view in your code. You get the null pointer in your int variable noteid in your main.
try to use this
int noteid = 0;
hope this will help you.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.