简体   繁体   中英

Getting an NullPointerException while trying to create a SQL Lite database - Android

I'm new to android and I am learning to create 'SQLite Database. When I execute the application I am getting the NullPointerException` error. can someone help me to fix this. Thanks

Here is my code.

Add Schedule Class

public class Addschedule extends ActionBarActivity {

    ScheduleAdapater schedulehelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_addschedule);

        schedulehelper = new ScheduleAdapater(this);

        Button bt = (Button) findViewById(R.id.btn_add_schedule);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                addschedule();
            }   
        });
    }


    public void addschedule(){

        EditText et_id_1 = (EditText) findViewById(R.id.et_id);
        EditText et_name_1 = (EditText) findViewById(R.id.et_name);
        EditText et_date_1 = (EditText) findViewById(R.id.et_date);

        int sch_id = Integer.parseInt(String.valueOf(et_id_1.getText()));
        String name = et_name_1.getText().toString();
        String date = et_date_1.getText().toString();

        long id = schedulehelper.InsertData(sch_id, name, date);
        if(id<0){
            Message.message(this, "Unsuccessful insert");
        }else{
            Message.message(this, "successful insert");
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_addschedule, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


}

Schedule Adapter Class

public class ScheduleAdapater {

    scheduleHelper sch_helper;

    public ScheduleAdapater(Context context){sch_helper = new scheduleHelper(context); }

    public long InsertData(Integer id, String name, String date){

        SQLiteDatabase db = sch_helper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(scheduleHelper.SCH_ID, id);
        contentValues.put(scheduleHelper.SCH_NAME, name);
        contentValues.put(scheduleHelper.SCH_DATE, date);
        long result_id = db.insert(scheduleHelper.TABLE_NAME, null, contentValues);
        return result_id;
    }


    static class scheduleHelper  extends SQLiteOpenHelper {

        private static final String DATABASE_NAME = "certisagent";
        private static final String TABLE_NAME = "schedule";
        private static final int DATABASE_VERSION = 3;
        private static final String SCH_ID="schedule_id";
        private static final String SCH_NAME = "schedule_name";
        private static final String SCH_DATE="schedule_date";
        private Context context;


        private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME+" ("+SCH_ID+" " +
                "INTEGER PRIMARY KEY, "+SCH_NAME+" VARCHAR(255), "+SCH_DATE+" VARCHAR(50));";
        private static final String DROP_TABLE = "DROP TABLE IF EXISTS "+TABLE_NAME+";";


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

        @Override
        public void onCreate(SQLiteDatabase db) {
            try {
                Message.message(context, "Oncreate called");
                db.execSQL(CREATE_TABLE);
            }catch (SQLException e){
                Message.message(context, ""+e);

            }

        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            try {
                Message.message(context, "onupgrade called");
                db.execSQL(DROP_TABLE);
                onCreate(db);
            }catch (SQLException e){
                Message.message(context, ""+e);

            }
        }
    }
}

Message class

public class Message {
    public static void message(Context context, String message){
      Toast.makeText(context, message, Toast.LENGTH_LONG).show();
    }
}

Error Stack

07-03 12:27:35.630    4482-4482/lk.db.learn.learndb E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: lk.db.learn.learndb, PID: 4482
    java.lang.NullPointerException
            at android.widget.Toast.<init>(Toast.java:106)
            at android.widget.Toast.makeText(Toast.java:264)
            at lk.db.learn.learndb.Message.message(Message.java:11)
            at lk.db.learn.learndb.ScheduleAdapater$scheduleHelper.onUpgrade(ScheduleAdapater.java:66)
            at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:257)
            at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
            at lk.db.learn.learndb.ScheduleAdapater.InsertData(ScheduleAdapater.java:21)
            at lk.db.learn.learndb.Addschedule.addschedule(Addschedule.java:48)
            at lk.db.learn.learndb.Addschedule$1.onClick(Addschedule.java:28)
            at android.view.View.performClick(View.java:4496)
            at android.view.View$PerformClick.run(View.java:18603)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5433)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
            at dalvik.system.NativeStart.main(Native Method)

can someone help me to fix this.Thank you.

context=null at

 Message.message(context, "Oncreate called");

So initialized it before used

 public scheduleHelper(Context context) {
      super(context, DATABASE_NAME, null, DATABASE_VERSION);  
      this.context=context;
    }

in scheduleHelper class

Create a global variable in ScheduleAdapater class

private Context mContext;

And pass context to your ScheduleAdapater constructor

public ScheduleAdapater(Context context){ 
   this.mContext = context;
}

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM