0

コード:

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

3 に答える 3

0

ハンドラーまたは asynctask 内に UI の更新を配置する

mHandler.post(new Runnable()

{ @Override public void run() { read.setText(a);

} });

于 2013-03-26T18:48:49.673 に答える
0

「createTable」メソッドでは、挿入で使用している「データベース」変数を​​設定していないため、null です。スタックトレースをチェックして、エラーが insert() メソッドにあるかどうかを確認してください。

createTable() の変更:

dbhelper.getWritableDatabase();

dbhelper.open();
于 2013-03-26T18:21:54.343 に答える
0

だからあなたには2つの問題があると思います。最初の問題はrawQuery()メソッドです。見て

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

ここでは、予約語の間にスペースがありません。出力は次のようになります。

selecttextfromtable

いいですね。解決策は、単語間にスペースを追加することであり、うまくいくはずです。

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

2 つ目は、おそらく Context に割り当てられたものを渡すことですNULL:

DatabaseOpenHelper dbhelper = new DatabaseOpenHelper(getBaseContext());

getBaseContext()を次のように変更します

new DatabaseOpenHelper(YourActivity.this);
于 2013-03-26T18:22:01.327 に答える