【问题标题】:Error: This class should provide a default constructor (a public constructor with no arguments) (com.example.app.Dblogic) [Instantiatable]错误:此类应提供默认构造函数(不带参数的公共构造函数)(com.example.app.Dblogic)[Instantiatable]
【发布时间】:2015-04-10 08:19:54
【问题描述】:

我目前使用的是 Android Studio 1.1.0。

我的项目构建成功。但是,当我尝试创建签名的 APK 时,我看到以下消息: 错误:错误:此类应提供默认构造函数(不带参数的公共构造函数)(com.example.app.Dblogic)[Instantiatable]

我看到很多人建议我创建一个空的构造函数。 但是,我的 Dblogic 类扩展了 SQLiteOpenHelper。 当我为 Dblogic 创建并清空构造函数时,我看到以下消息: android.database.sqlite.sqliteopenhelper 中没有可用的默认构造函数

这似乎是第 22 条规定的情况。 感谢你的帮助!

代码:

package com.example.app;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class Dblogic extends SQLiteOpenHelper {

static final String DATABASE_NAME = "sweet.db";
private static final int DATABASE_VERSION = 1;

static final String TABLE_NAME1 = "tb_sweet";

private SQLiteDatabase database;

public Dblogic() {
}


public Dblogic(Context context) {
//public Dblogic() {
    //super(context, DATABASE_NAME, null, DATABASE_VERSION);
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    // TODO Auto-generated constructor stub
}



@Override
public void onCreate(SQLiteDatabase db) {
      db.execSQL("CREATE TABLE "+ TABLE_NAME1    + " ( "    + "_id INTEGER PRIMARY KEY AUTOINCREMENT, Date TEXT NOT NULL, Name TEXT NOT NULL, Description TEXT NOT NULL, Image BLOB);");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME1);
    onCreate(db);
}

public void openDB() throws SQLException {
    database = getWritableDatabase();
}

public void closeDB() {
    database.close();
}

public long insertQuery(ContentValues cValues) {
    return database.insert(TABLE_NAME1, null, cValues);
}

}

【问题讨论】:

  • 基类没有无参数构造函数!!你可以使用这个引用从你的无参数构造函数中调用你的参数化构造函数。
  • 能否提供示例代码?我的初始代码没有以下内容:public Dblogic() {}。当我尝试签署 APK 时,它建议我添加空构造函数。那是我添加它的时候。谢谢!
  • public Dblogic() { this.Dblogic(new Context());} 可以这样。你可以写一些这样的东西
  • 谢谢,我尝试了这段代码的上下文,我看到“上下文是抽象的,不能被实例化”。对于构造函数方法,我看到“android.database.sqlite.sqliteopenhelper 中没有可用的默认构造函数”。
  • public Dblogic() { this.Dblogic(null);} 你可以试试这个。

标签: java android sqlite constructor


【解决方案1】:
public Dblogic() {

    super(null, DATABASE_NAME, null, DATABASE_VERSION);
    // TODO Auto-generated constructor stub
}

我遇到了同样的问题,可以通过上面的代码解决。

【讨论】:

  • 请用英文回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多