更新:古い問題を解決し、新しい問題を発見しました。それは私のカーソルが行0とcol -1にあり、そのためプログラムがクラッシュすると言います。SQLiteに値を保存または選択できません
私はメッセージングアプリケーションを作成していますが、SQLiteを使用してメッセージを保存しますが、それらを選択しようとすると常に空のセットがあります。関連するクラスとメソッドは次のとおりです。
public class DBHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION=1;
private static final String DATABASE_NAME="messages.db";
public static final String TABLE_MESSAGES="messages";
public static final String COLUMN_MESSAGE="message";
public static final String COLUMN_JID="jid";
public static final String COLUMN_ID="_id";
public DBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, DATABASE_NAME, factory,DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String query="CREATE TABLE " + TABLE_MESSAGES + "("+ COLUMN_ID+ " INTEGER PRIMARY KEY AUTOINCREMENT, "+ COLUMN_JID+ " TEXT, "+ COLUMN_MESSAGE +" TEXT " +");";
sqLiteDatabase.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
sqLiteDatabase.execSQL(" DROP TABLE IF EXISTS "+ TABLE_MESSAGES);
onCreate(sqLiteDatabase);
}
public void addnewMessage(Messages message){
ContentValues values = new ContentValues();
values.put(COLUMN_JID,message.get_jid());
values.put(COLUMN_MESSAGE,message.get_message());
SQLiteDatabase db=getWritableDatabase();
db.insert(TABLE_MESSAGES,null,values);
db.close();
}
public String displayMessage(){
SQLiteDatabase db=getWritableDatabase();
String returnthis="";
String query="SELECT * FROM "+ TABLE_MESSAGES + " WHERE 1" ;
Cursor c=db.rawQuery(query,null);
c.moveToFirst();
while(!c.isAfterLast()){
if(c.getString(c.getColumnIndex("message"))!=null){
returnthis+=c.getString(c.getColumnIndex("message"));
returnthis+="\n";
}
}
db.close();
return returnthis;
}
}
メッセージを送信するときに、addNewMessage(メッセージメッセージ)メソッドを使用して、メッセージの文字列の内容をデータベースに記録します。ここにメッセージのコンストラクタがあります。
public Messages(String jid, String message){
this._message=message;
this._jid=jid;
}
私はdbにそれらを追加する前に有効なjidとメッセージの値を持っていると確信しています。私がdisplayMessageメソッドでそれを表示しようとすると、私が得るのはヌルです(プログラムはクラッシュしませんが、文字列の値を与えません)
**完全に役に立たないだけでなく、潜在的に危険な**を削除してみてください。 –