简体   繁体   中英

Error:Error: This class should provide a default constructor (a public constructor with no arguments)

I keep getting this error whenever I try and generate a signed APK in Android Studio.

Error:Error: This class should provide a default constructor (a public constructor with no arguments) (com.examlemenu.acer.sigsekolahku.Database) [Instantiatable]

Can anyone tell me why this is happening?

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;
    }
}

The only constructor you have for your class is this one

public Database (Context context){
    ...
}

which takes a Context as a parameter. The error that you are getting is telling you that it wants a constructor without any parameters. Something like this.

public Database(){
    ...
}

APK signing try to create object of this class to verify rules but it's not being able to create object. Because it uses default constructor to create object.

You need to define a constructor without any parameter(just like default constructor the one java implicitly provides you when you haven't write one). As you have a parameterized constructor that's why compiler don't generated implicit constructor.

Define a constructor like below, it will solve issue.

public Database() {
}

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