嗨,我正在研究一个项目,它包含一个数据库。 创建数据库并将数据插入数据库后,我想将数据发送到另一个意图。当用户触摸其中一个图像按钮时,我的应用程序上会出现图像按钮,另一个意图会打开并显示有关该图像按钮的信息。
因此,我发送了被触摸的imageButton
的ID,因此我知道源按钮是什么。由于以下代码不会执行“ if”主体[if(cursor.moveToFirst()
]。游标有什么问题?为什么它不能移到第一位?
这是显示信息的意图。
IDVALUE
是imageButtons
的ID。我检查了一下,效果很好。
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_info);
Bundle IDbundle = this.getIntent().getExtras();
IDVALUE = IDbundle.getInt("cnt0");
tv1 = (TextView) findViewById(R.id.Info_textView1);
cursor = MainActivity.db.rawQuery("SELECT * FROM movieInfo WHERE movie_id = '+IDVALUE+'",null);
if(cursor != null) {
if (cursor.moveToFirst()) {
tv1.setText(cursor.getString(2));
}
}
我的数据库中有两条记录(代码在MainActivity
中),一条
包含id
,另一个包含information
private void InitialDatabase() {
try {
File root = new File(Environment.getExternalStorageDirectory(), "infoFile");
if (!root.exists()) {
root.mkdir();
}
File file = new File(root, "info");
if (!file.exists()) {
file.createNewFile();
}
db = SQLiteDatabase.openOrCreateDatabase(file, null);
db.execSQL("CREATE TABLE IF NOT EXISTS" +
" movieInfo(movie_id INTEGER PRIMARY KEY AUTOINCREMENT,movie_info TEXT)");
//now i have a data base with two record
db.execSQL("INSERT INTO movieInfo (movie_info) VALUES('1')");
db.execSQL("INSERT INTO movieInfo (movie_info) VALUES('2')");
db.execSQL("INSERT INTO movieInfo (movie_info) VALUES('3')");
db.execSQL("INSERT INTO movieInfo (movie_info) VALUES('4')");
db.execSQL("INSERT INTO movieInfo (movie_info) VALUES('5')");
db.execSQL("INSERT INTO movieInfo (movie_info) VALUES('6')");
} catch (IOException io) {
Toast.makeText(this, "error on initialing dataBase", Toast.LENGTH_SHORT).show();
}
}
这是我的数据库代码
答案 0 :(得分:1)
"SELECT * FROM movieInfo WHERE movie_id = '+IDVALUE+'"
您要匹配文字+IDVALUE+
,而不是Java变量IDVALUE
中包含的数据。更改为:
"SELECT * FROM movieInfo WHERE movie_id = '" + IDVALUE + "'"
请注意MainActivity.db.rawQuery()
看起来很可疑-如果此代码不在MainActivity中,则不能依靠其他活动已初始化其字段。而是在该活动中打开一个新的数据库引用。