2

I have a simple code which create an array list from an SQLite code this exists in another activity. I want to use the parameters from the other activity but keeping get the error : "There is no default constructor available in android.database.sqlite.SQliteOpenHelper".

Can you please show me what i've missed ?

Here is the first activity which turns the SQLite db to arraylist :

GpsPage.java :

 class myLocationListener implements LocationListener {

                @Override
                public void onLocationChanged(Location location) {
                    if (location != null) {
                        double pLong = location.getLongitude();
                        double pLat = location.getLatitude();
                        float pAcc = location.getAccuracy();
                        long pTime = location.getTime();
                        textLat.setText(Double.toString(pLat));
                        textLong.setText(Double.toString(pLong));
                        db.addRecord(new Record(pLong, pLat, pAcc, pTime));

                        class PersonsDatabaseHandler extends   SQLiteOpenHelper {



                            //Database Name
                            private static final String DATABASE_NAME = "RecordsDB";
                            private static final String TABLE_RECORD = "record";

                            //Table names
                        //    private static final TABLE_RECORD = "records";

                            //Get all Persons
                             ArrayList<Record> getAllPersons() {
                                ArrayList<Record> localList = new ArrayList<Record>();

                                String selectQuery = "SELECT * FROM " + TABLE_RECORD;

                                SQLiteDatabase db = this.getReadableDatabase();
                                Cursor cursor = db.rawQuery(selectQuery, null);

                                //Loops through all rows and adds them to the local list
                                if(cursor.moveToFirst())
                                {
                                    do {
                                        //Get person information
                                        Record record = new Record();
                                        record.setpLong(cursor.getDouble(0));
                                        record.setpLat(cursor.getDouble(1));
                                        record.setpAcc(cursor.getFloat(2));
                                        record.setpTime(cursor.getLong(3));

                                        //Add person to list
                                        localList.add(record);
                                    } while (cursor.moveToNext());
                                }

                                return localList;

And here is the second activity which the DB located :

MySQLiteHelper.java :

public class MySQLiteHelper extends SQLiteOpenHelper {


    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "RecordsDB";

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        // SQL statement to create record table
        String CREATE_RECORD_TABLE = "CREATE TABLE RECORD ( " +
                "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "latitude TEXT NOT NULL, " +
                "longtitude TEXT NOT NULL, " +
                "accuracy TEXT NOT NULL, " +
                "time TEXT NOT NULL )";

        // create books table
        db.execSQL(CREATE_RECORD_TABLE);
    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older books table if existed
        db.execSQL("DROP TABLE IF EXISTS RECORD");

        // create fresh record table
        this.onCreate(db);
    }

    // Books table name
    private static final String TABLE_RECORD = "record";

    // Books Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_LONG = "longtitude";
    private static final String KEY_LAT = "latitude";
    private static final String KEY_ACC = "accuracy";
    private static final String KEY_TIME = "time";

    private static final String[] COLUMNS = {KEY_ID, KEY_LONG, KEY_LAT, KEY_ACC, KEY_TIME};

    public void addRecord(Record record) {
        //for logging
        Log.d("addRecord", record.toString());

        // 1. get reference to writable DB
        SQLiteDatabase db = this.getWritableDatabase();

        // 2. create ContentValues to add key "column"/value
        ContentValues values = new ContentValues();
        values.put(KEY_LONG, record.getpLong());
        values.put(KEY_LAT, record.getpLat());
        values.put(KEY_ACC, record.getpAcc());
        values.put(KEY_TIME, record.getpTime());

        // 3. insert
        db.insert(TABLE_RECORD, // table
                null, //nullColumnHack
                values); // key/value -> keys = column names/ values = column values

        // 4. close
        db.close();
    }

    public Record getRecord(int id) {

        // 1. get reference to readable DB
        SQLiteDatabase db = this.getReadableDatabase();

        // 2. build query
        Cursor cursor =
                db.query(TABLE_RECORD, // a. table
                        COLUMNS, // b. column names
                        " id = ?", // c. selections
                        new String[]{String.valueOf(id)}, // d. selections args
                        null, // e. group by
                        null, // f. having
                        null, // g. order by
                        null); // h. limit

        // 3. if we got results get the first one
        if (cursor != null)
            cursor.moveToFirst();

        // 4. build book object
        Record record = new Record();
        record.setID(Integer.parseInt(cursor.getString(0)));
        record.setpLat(cursor.getDouble(1));
        record.setpLong(cursor.getDouble(2));
        record.setpAcc(cursor.getFloat(2));
        record.setpTime(cursor.getLong(2));

        //log
        Log.d("getBook(" + id + ")", record.toString());

        // 5. return book
        return record;
    }

    public List<Record> getAllRecords() {
        List<Record> records = new LinkedList<Record>();

        // 1. build the query
        String query = "SELECT  * FROM " + TABLE_RECORD;

        // 2. get reference to writable DB
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(query, null);

        // 3. go over each row, build book and add it to list
        Record record = null;
        if (cursor.moveToFirst()) {
            do {
                record = new Record();
                record.setID(Integer.parseInt(cursor.getString(0)));
                record.setpLat(cursor.getDouble(1));
                record.setpLong(cursor.getDouble(2));
                record.setpAcc(cursor.getFloat(2));
                record.setpTime(cursor.getLong(2));


                // Add book to books
                records.add(record);
            } while (cursor.moveToNext());
        }

        Log.d("getAllRecords()", record.toString());

        // return books
        return records;
    }

    public int UpdateRecords(Record record) {

        // 1. get reference to writable DB
        SQLiteDatabase db = this.getWritableDatabase();

        // 2. create ContentValues to add key "column"/value
        ContentValues values = new ContentValues();
        values.put("Latitude", record.getpLat()); //
        values.put("Longtitude", record.getpLong());
        values.put("Accuracy", record.getpAcc());
        values.put("Time", record.getpTime());

        // 3. updating row
        int i = db.update(TABLE_RECORD, //table
                values, // column/value
                KEY_ID + " = ?", // selections
                new String[]{String.valueOf(record.getID())}); //selection args

        // 4. close
        db.close();

        return i;

    }

    public void deleteRecords(Record record) {

        // 1. get reference to writable DB
        SQLiteDatabase db = this.getWritableDatabase();

        // 2. delete
        db.delete(TABLE_RECORD, //table name
                KEY_ID + " = ?",  // selections
                new String[]{String.valueOf(record.getID())}); //selections args

        // 3. close
        db.close();

        //log
        Log.d("deleteBook", record.toString());

    }
Suragch
  • 484,302
  • 314
  • 1,365
  • 1,393
GeoRay
  • 71
  • 2
  • 7
  • 1
    `PersonsDatabaseHandler` is missing a constructor (see your other `SQLiteOpenHelper`) –  Jan 02 '15 at 06:36

2 Answers2

3

You have already created a MySQLiteHelper class which is extends with SQLiteOpenHelper . So just you need to make a instance of your class and call a method using that instance. Like,

 MySQLiteHelper helper = new MySQLiteHelper(YourActivityName.this);

You can call method using this instance. Like,

 helper.getAllRecords();
RockStar
  • 409
  • 2
  • 6
3

SQLiteHelper needs a constructor with Context variable as parameter.

You should call:

MySQLiteHelper database = new MySQLiteHelper(context);

Context context variable you can get from your activity, service, broadcast receiver ... or inherit directly from Application class (and you should remember declare this class in manifest file).

For example:

MySQLiteHelper database = new MySQLitehelper(activity.getApplicationContext());

Also, note that you should use Application Context rather than Activity context. To see difference, you see this link: Application Context vs Activity Context

Hope this help :)

Community
  • 1
  • 1
hqt
  • 29,632
  • 51
  • 171
  • 250