java - Android - 没有可用的默认构造函数

标签 java android sqlite

我有一个简单的代码,它从另一个 Activity 中存在的 SQLite 代码创建一个数组列表。我想使用其他 Activity 的参数,但一直收到错误消息: “android.database.sqlite.SQliteOpenHelper 中没有可用的默认构造函数”。

你能告诉我我错过了什么吗?

这是将 SQLite 数据库转换为数组列表的第一个 Activity :

全局定位系统.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;

这是数据库定位的第二个 Activity :

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());

    }

最佳答案

您已经创建了一个 MySQLiteHelper 类,它扩展了 SQLiteOpenHelper 。因此,您只需要创建类的实例并使用该实例 调用方法即可。喜欢,

 MySQLiteHelper helper = new MySQLiteHelper(YourActivityName.this);

您可以使用此实例调用方法。喜欢,

 helper.getAllRecords();

关于java - Android - 没有可用的默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27738270/

相关文章:

sqlite - 如何将 Sqlite 集成到 Visual Studio?

Android SQLite 大量行

java - spring data jpa中如何从子主键获取父实体?

android - Android 单元测试中的模拟改造 Observable<T> 响应

安卓最有值(value)球员。谁关心从对话框和外部应用程序启动和获取数据?

java - 我应该在 Android 中使用哪种 OCR Java 库?

SQL 查询为 SQLite 返回 JSON 中的嵌套对象数组

java - 如何在 java 中编写十六进制浮点文字?

java - 使用 super 关键字从子类访问父类(super class)成员

java - 如何使用 GeckoDriver Firefox 和 Selenium 下载文件?