当试图将数据插入我的 sqlite 数据库时,我收到一个 logcat 错误“没有空的构造函数”。错误消息听起来很简单,但我可以理解一个 empy 构造函数将如何帮助我将数据插入到我的数据库中。
错误:
E/AndroidRuntime(531): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.LoginScr.Example/com.LoginScr.Example.LoginDB}: java.lang.InstantiationException: can't instantiate class com.LoginScr.Example.LoginDB; no empty constructor
数据库:
public class LoginDB extends SQLiteOpenHelper {
//Table attributes
public static final String DATABASE_NAME = "logindata.db";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_NAME_INFOTABLE = "credentials";
// Data attributes
public static final String COLUMN_NAME_USERNAME = "username";
public static final String COLUMN_NAME_PASSWORD = "password";
private SQLiteOpenHelper DBHelper;
private SQLiteDatabase db;
public LoginDB(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String sqlDataStore = "create table if not exists " +
DATABASE_NAME + " ("+ BaseColumns._ID + " integer primary key autoincrement,"
+ COLUMN_NAME_USERNAME + " text not null,"
+ COLUMN_NAME_PASSWORD + " text not null);";
db.execSQL(sqlDataStore);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
if(oldVersion == 1 && newVersion == 2){
//Upgrade the database
}
}
public boolean Login(String username, String password) throws SQLException
{
Cursor mCursor = db.rawQuery("SELECT * FROM " + DATABASE_NAME + " WHERE username=? AND password=?",
new String[]{username,password});
if(mCursor !=null) {
if(mCursor.getCount()>0)
{
return true;
}
}
return false;
}
public void open() {
// TODO Auto-generated method stub
db = DBHelper.getWritableDatabase();
}
public void close() {
DBHelper.close();
}
}
活动:
public class CredentialsActivity extends Activity implements OnClickListener{
private Button lReg;
private EditText lUname;
private EditText lPword;
private LoginDB loginDb = new LoginDB(CredentialsActivity.this);
@Override
protected void onCreate (Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
lReg = (Button)findViewById(R.id.reg_button);
lReg.setOnClickListener(this);
}
public void onClick(View v) {
switch(v.getId()) {
case R.id.reg_button:
lUname = (EditText)findViewById(R.id.reg_uname);
lPword = (EditText)findViewById(R.id.reg_pswd);
String uname = lUname.getText().toString();
String pass = lPword.getText().toString();
boolean invalid = false;
if(uname.equals("")){
invalid = true;
Toast.makeText(getApplicationContext(), "Username Missing", Toast.LENGTH_SHORT).show();
}else if(pass.equals("")){
invalid = true;
Toast.makeText(getApplicationContext(), "Password Missing", Toast.LENGTH_SHORT).show();
}
if(invalid == false){
addEntry(uname, pass);
Intent i_register = new Intent(CredentialsActivity.this, LoginDB.class);
startActivity(i_register);
finish();
}}
}
public void onDestroy() {
super.onDestroy();
loginDb.close();
}
public void addEntry(String uname, String pass){
SQLiteDatabase db = loginDb.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("username", uname);
values.put("password", pass);
try{
db.insert(LoginDB.DATABASE_NAME, null, values);
Toast.makeText(getApplicationContext(), "Saved! Please login now", Toast.LENGTH_SHORT).show();
}catch(Exception err){
err.printStackTrace();
}
}
}