每当我尝试在Android Studio中生成已签名的APK时,我都会收到此错误。
错误:错误:此类应提供默认构造函数(public 没有参数的构造函数) (com.examlemenu.acer.sigsekolahku.Database)[Instantiatable]
谁能告诉我为什么会这样?
package com.examlemenu.acer.sigsekolahku;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
public class Database extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "sigsekolah";
private SQLiteDatabase DB;
public Database (Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {creaTabel (db);}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
public void openWriteble(){this.DB = getWritableDatabase();}
public void openReadtable(){this.DB = getReadableDatabase();}
public void close(){this.DB.close();}
public void creaTabel(SQLiteDatabase db){
String sekolahsma = "CREATE TABLE IF NOT EXISTS sma (id INTEGER PRIMARY KEY, nisn TEXT, nama TEXT, akreditasi TEXT, alamat TEXT, keterangan TEXT)";
db.execSQL(sekolahsma);
}
public long insertsma(int id, String nisn, String nama, String akreditasi, String alamat, String keterangan){
ContentValues values = new ContentValues();
values.put("id", id);
values.put("nisn", nisn);
values.put("nama", nama);
values.put("akreditasi", akreditasi);
values.put("alamat", alamat);
values.put("keterangan", keterangan);
return DB.insert("sma", null, values);
}
public int updatesma(int id, String nisn, String nama, String akreditasi, String alamat, String keterangan) {
ContentValues values = new ContentValues();
values.put("id", id);
values.put("nisn", nisn);
values.put("nama", nama);
values.put("akreditasi", akreditasi);
values.put("alamat", alamat);
values.put("keterangan", keterangan);
return DB.update("sma", values, "id = " + id, null);
}
public int deletesma(int id){return DB.delete("sma", "id = " + id, null);}
public ArrayList<String> getsmalist(){
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT * from sma", null);
ArrayList<String> List = new ArrayList<>();
cursor.moveToFirst();
for (int i = 0; i < cursor.getCount(); i++){
List.add(cursor.getString(cursor.getColumnIndex("nama")));
cursor.moveToNext();
}
return List;
}
}
答案 0 :(得分:0)
你班上唯一的构造函数就是这个
public Database (Context context){
...
}
以Context作为参数。您收到的错误告诉您它需要一个没有任何参数的构造函数。这样的事情。
public Database(){
...
}
答案 1 :(得分:-1)
APK签名尝试创建此类的对象以验证规则,但它无法创建对象。因为它使用默认构造函数来创建对象。
你需要定义一个没有任何参数的构造函数(就像默认构造函数一样,当你还没有写一个java时,它会隐式地提供给你)。因为你有一个参数化的构造函数,这就是为什么编译器不会生成隐式构造函数。
定义如下的构造函数,它将解决问题。
public Database() {
}