我正在尝试做什么:ListView活动A,我触摸一个项目,它会打开一个新的listview活动。我从列表A中选择的数据库行中获取主键并使用putExtra。在活动B中,在onCreate中我想检查并查看表B中是否有任何行,其中列TOPIC_CONTENT_TOPIC_ID的值等于表A中putExtra的主键。如果表是空的,或者没有匹配的ID,我想创建一个新行,其中列TOPIC_CONTENT_TOPIC_ID现在等于表A中的主键。这是我的代码。它在db.query();
上崩溃public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.topic_content);
dbMaker = new DatabaseMaker(this);
SQLiteDatabase db = dbMaker.getReadableDatabase();
Intent myIntent = getIntent();
int topicIDInt = (int) myIntent.getLongExtra("com.spentakapps.ScripturalConcordance.Topics", -1);
String topicID = Long.toString(myIntent.getLongExtra("com.spentakapps.ScripturalConcordance.Topics", -1));
String WHERE = DatabaseStructure.TOPICS_CONTENT_TOPIC_ID + " = " + topicID;
Cursor cur = db.query(DatabaseStructure.TABLE_TOPICS_CONTENT, new String[] {DatabaseStructure.TOPICS_CONTENT_CONTENT},WHERE, null, null, null, null);
if (cur.getCount() <= 0)
{
ContentValues values = new ContentValues();
values.put(DatabaseStructure.TOPICS_CONTENT_TOPIC_ID, topicIDInt);
db = dbMaker.getWritableDatabase();
db.insert(DatabaseStructure.TABLE_TOPICS_CONTENT, null, values);
db = dbMaker.getReadableDatabase();
cur = db.query(DatabaseStructure.TABLE_TOPICS_CONTENT, new String[] {DatabaseStructure.TOPICS_CONTENT_TOPIC_ID},WHERE, null, null, null, null);
}
View addContentButton = findViewById(R.id.content_button_add);
addContentButton.setOnClickListener(this);
//Set up data binding
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.topiccontentlineitem,cur, FROM,TO);
setListAdapter(adapter);
}
答案 0 :(得分:0)
我对这些问题的建议始终是使用以下方式登录模拟器:
adb shell
然后直接打开sqlite db
# cd /data/data/<your application package>/databases/
# ls
# sqlite3 <your database file>
一旦进入,你应该能够尝试手动运行你的sql以确保它有效:
select id from TABLE_TOPICS_CONTENT where id='someidvalue' limit 1
当你说它在db.query上崩溃时,上面的代码中有两个db.query状态网。我的猜测是,由于您多次呼叫dbMaker.getReadableDatabase();
,因此遇到了重大问题。尝试在开始时将其称为runnable,并尝试使用这些来验证您的sql是否有效。如果失败,请附上您的错误日志。