下面的教程我想在执行此操作时将一行插入到表中向数据库中插入一行时的运行时间致命异常 其Helper数据库类: DatabasaeAdaptor.javaSQlite:IllegalStateException:无法在插入一行时执行该活动的方法
package com.example.sarahn.inserttable;
import android.content.ContentValues;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseAdaptor {
Helperdb helperdb;
DatabaseAdaptor(Context context){
helperdb = new Helperdb(context);
}
public long insertdata(String name,String password){
SQLiteDatabase db = helperdb.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(helperdb.NAME,name);
contentValues.put(helperdb.PASSWORD,password);
long id = db.insert(helperdb.TABLE_NAME,null,contentValues);
return id;
}
static class Helperdb extends SQLiteOpenHelper
{
private static final String DATABASE_NAME = "insert";
private static final String TABLE_NAME = "table";
private static final int DATABASE_VERSION = 1;
private static final String UID = "_name";
private static final String NAME = "user";
private static final String PASSWORD = "pw";
private static final String CREATE_TABLE = "CREATE TABLE
"+TABLE_NAME+"("+UID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+NAME+"
VARCHAR(255), "+PASSWORD+" VARCHAR(255));";
private static final String DROP_TABLE = "DROP TABLE IF EXISTS"
+TABLE_NAME;
private Context context;
//context, database name,
public Helperdb (Context context) {
super(context,DATABASE_NAME, null, DATABASE_VERSION);
this.context= context;
Message.message(context, "constructor called");
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TABLE);
Message.message(context, "OnCreate called");
}catch (SQLException e)
{
Message.message(context, "" + e);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
try {
db.execSQL(DROP_TABLE);
onCreate(db);
Message.message(context, "Onupgrade called");
}catch (SQLException e)
{
Message.message(context,""+e);
Message.message(context, "Error");
}
}
}
}
而且其MainActivity.java
package com.example.sarahn.inserttable;
import android.app.Activity;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends Activity {
EditText username;
EditText password;
DatabaseAdaptor db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
username =(EditText) findViewById(R.id.etname);
password = (EditText) findViewById(R.id.etpass);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void adduser(View view)
{
String user = username.getText().toString();
String pass = password.getText().toString();
long count =db.insertdata(user,pass);
if(count<0)
{
Message.message(this,"Unsucessful");
}else
{
Message.message(this,"Sucessfull");
}
}
}
如果它在mainactivity adduser的方法应该是这个样子?
public void adduser(View view)
{
String user = username.getText().toString();
String pass = password.getText().toString();
db=new DatabaseAdaptor(getApplicationContext());
long count =db.insertdata(user,pass);
if(count<0)
{
Message.message(this,"Unsucessful");
}else
{
Message.message(this,"Sucessfull");
}
初始化数据库适配器的位置?该代码不在您的代码片段中。你在哪一行得到IllegalStateException? –
是的,你应该首先初始化。最好在onCreate方法中编写以下代码行。 db = new DatabaseAdaptor(getApplicationContext()); –
我工作,但在这个声明中有错误,最新错误私人静态最终字符串DROP_TABLE =“DROP TABLE IF EXISTS”+ TABLE_NAME; – Sarah