单击插入按钮后SQLite Android崩溃(插入按钮用于创建和插入表和表值)

时间:2013-03-26 18:12:55

标签: android android-sqlite

代码:

public class DatabaseOpenHelper extends SQLiteOpenHelper {
public String str=null;
public static final String TABLE_SPEECH = "takespeech";
public static final String COLUMN_ID = "id";
public static final String SPEECH_TEXT = "speech";

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

private SQLiteDatabase database;
private DatabaseOpenHelper dbHelper;
private static final String TABLE_CREATE =
                "CREATE TABLE " + TABLE_SPEECH + "(" + COLUMN_ID +" INTEGER, " +
                 SPEECH_TEXT + " TEXT);";

    DatabaseOpenHelper(Context context) {
        super(context,DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(TABLE_CREATE);
        Log.v("MainActivity", "after creation");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_SPEECH);

        // Create tables again
        onCreate(db);
    }

    public void open() throws SQLException {
        database=dbHelper.getWritableDatabase();
    }

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

    public void insert(String getpass) {
        ContentValues cv=new ContentValues();
        cv.put(COLUMN_ID, 1);
        cv.put(SPEECH_TEXT,getpass);
      //    open();
        database.insert(TABLE_SPEECH, null, cv);
      //    close();
    }

   public String readme() {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery("SELECT"+SPEECH_TEXT+"FROM"+TABLE_SPEECH,null);
        if (cursor.moveToFirst()) {
            str = cursor.getString(cursor.getColumnIndex(SPEECH_TEXT));
        }

        return str; 
    }
}

在Mainactivty中有一个按钮(是),用于添加和创建表和表值:点击此应用程序后崩溃。

yes.setOnClickListener(new View.OnClickListener(){
        public void onClick(View view) {  
            try {
               createTable();       
            }
            catch (SQLiteException se) {
               Log.e(getClass().getSimpleName(), "Could not create or Open the database");
            } 
        }
});

这是当用户点击是按钮并且插入数据并且应该调用onCreate()时调用的函数,但是当我点击是不知道时它会崩溃。

public void createTable() {
    DatabaseOpenHelper dbhelper=new DatabaseOpenHelper(getBaseContext());
    dbhelper.getWritableDatabase();
    dbhelper.insert(pass);
    String a=dbhelper.readme();
    TextView reads=(TextView)findViewById(R.id.textView2);
    reads.setText(a);
}

3 个答案:

答案 0 :(得分:0)

在“createTable”方法中,您没有设置在插入中使用的“数据库”变量,因此它为null。检查堆栈跟踪并查看错误是否在insert()方法中。

在createTable()中更改:

dbhelper.getWritableDatabase();

dbhelper.open();

答案 1 :(得分:0)

所以你认为我有两个问题。第一个问题是 rawQuery()方法。看

db.rawQuery("SELECT"+SPEECH_TEXT+"FROM"+TABLE_SPEECH, null);

在这里,您在保留字之间缺少空格。你的输出现在是这样的:

selecttextfromtable

听起来不太好,不是吗?解决方案是在单词之间添加空格,它应该有用。

String query = "SELECT " + SPEECH_TEXT + " FROM " + TABLE_SPEECH;
db.rawQuery(query, null);

其次,您可能正在传递分配给NULL的上下文:

DatabaseOpenHelper dbhelper = new DatabaseOpenHelper(getBaseContext());

getBaseContext()更改为

new DatabaseOpenHelper(YourActivity.this);

答案 2 :(得分:0)

将ui更新放在handler或asynctask

mHandler.post(new Runnable()

{         @覆盖         public void run() {         reads.setText(一);

}     });