gpt4 book ai didi

android - Android 中的光标错误告诉我列不存在

转载 作者:IT王子 更新时间:2023-10-29 06:25:43 26 4
gpt4 key购买 nike

我的应用程序需要返回一个包含一堆引号的游标,具体取决于选择的作者。现在,我正在对应用程序进行硬编码,因此它只会返回一位作者的引述。

错误发生在我的游标适配器参数中,设置“to”列,它告诉我这个列“quote”不存在。

我已经尝试将 to 参数更改为 KEY_QUOTE,甚至尝试更改实际数据库列的名称,但现在仍然很高兴。

我做错了什么?

以下是此操作中使用的代码块。

  1. 创建数据库表,引用
  2. 填充此表
  3. 查询报价
  4. 打开数据库连接,创建游标(我得到实际错误的地方,使用“from”参数)

1.

private static final String CREATE_QUOTE_TABLE = 

"create table " + QUOTES_TABLE +
" (_id integer primary key autoincrement, " +
"auth_name text not null, " +
"myQuote text not null, " +
"category text not null);";

2.

public long populateQuotes(){

ContentValues initialValues = new ContentValues();

long[] rowIds = new long[authorName.length];

// Add wilson quotes category: Anthropology
for(int i = 0; i < 3; i++){
initialValues.put(KEY_AUTHNAME, authorName[3]);
initialValues.put(KEY_QUOTE, quoteRAW[i]);
initialValues.put(KEY_CATEGORY, category[0]);
rowIds[i] = qmDB.insertOrThrow(QUOTES_TABLE, null, initialValues);
}
// Add wilson quotes category: RAW
for(int i = 3; i < 5; i++){
initialValues.put(KEY_AUTHNAME, authorName[3]);
initialValues.put(KEY_QUOTE, quoteRAW[i]);
initialValues.put(KEY_CATEGORY, category[1]);
rowIds[i] = qmDB.insertOrThrow(QUOTES_TABLE, null, initialValues);

}
// Add wilson quotes category: Philosophy
for(int i = 5; i < 11; i++){
initialValues.put(KEY_AUTHNAME, authorName[3]);
initialValues.put(KEY_QUOTE, quoteRAW[i]);
initialValues.put(KEY_CATEGORY, category[2]);
rowIds[i] = qmDB.insertOrThrow(QUOTES_TABLE, null, initialValues);

}
// Add wilson quotes category: General Semantics
for(int i = 11; i < 12; i++){
initialValues.put(KEY_AUTHNAME, authorName[3]);
initialValues.put(KEY_QUOTE, quoteRAW[i]);
initialValues.put(KEY_CATEGORY, category[3]);
rowIds[i] = qmDB.insertOrThrow(QUOTES_TABLE, null, initialValues);

}
// Add wilson quotes category: Humor
for(int i = 11; i < 12; i++){
initialValues.put(KEY_AUTHNAME, authorName[3]);
initialValues.put(KEY_QUOTE, quoteRAW[i]);
initialValues.put(KEY_CATEGORY, category[4]);
rowIds[i] = qmDB.insertOrThrow(QUOTES_TABLE, null, initialValues);

}

return rowIds[0];
}

3.

public Cursor getQuotes(){

/*
return qmDB.query(QUOTES_TABLE, new String[]{
KEY_QUOTE
},
KEY_AUTHNAME + "=" + "'Robert Anton Wilson'",
null,
null,
null,
null);*/



//String who = authorName[position];
return qmDB.rawQuery("SELECT _id as _id from Quotes WHERE auth_name = ?",
new String[]{"'Robert Anton Wilson'"});

}

4.

// Create DB connection and open.
dbm = new MyDBManager(this);
dbm.open();

// Call for the quotes to be queried, store results in cursor.
myCursor = dbm.getQuotes();
myCursor.moveToFirst();

// Column quote does not exist?
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.quoterow, myCursor, new String[]{"myQuote"}, new int[]{R.id.quote});
this.setListAdapter(mAdapter);

myCursor.close();

为了进一步说明,我包含了错误日志:

05-01 18:38:13.876: ERROR/AndroidRuntime(1455): FATAL EXCEPTION: main
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.QuoteMachine/com.QuoteMachine.Quote}: java.lang.IllegalArgumentException: column 'myQuote' does not exist
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.app.ActivityThread.access$2300(ActivityThread.java:135)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.os.Handler.dispatchMessage(Handler.java:99)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.os.Looper.loop(Looper.java:144)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.app.ActivityThread.main(ActivityThread.java:4937)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at java.lang.reflect.Method.invokeNative(Native Method)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at java.lang.reflect.Method.invoke(Method.java:521)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at dalvik.system.NativeStart.main(Native Method)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): Caused by: java.lang.IllegalArgumentException: column 'myQuote' does not exist
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:312)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:87)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at com.QuoteMachine.Quote.onCreate(Quote.java:42)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751)
05-01 18:38:13.876: ERROR/AndroidRuntime(1455): ... 11 more

最佳答案

在 CREATE_QUOTE_TABLE 中,您使用“quote text not null,”,并且在您显示的 logcat 中:Caused by: java.lang.IllegalArgumentException: column 'myQuote' does not existKEY_QUOTE 的值是多少?它应该与表中的列名相匹配。

测试这个查询:

return qmDB.rawQuery("SELECT _id, myQuote, auth_name, category FROM Quotes WHERE auth_name=?", 
new String[]{"'Robert Anton Wilson'"});

我相信您的问题不是查询试图检索不存在的列。我认为问题是您创建的游标没有您的适配器所需的所有信息(即,游标没有列,没有表)。

关于android - Android 中的光标错误告诉我列不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5850013/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com