我发现了这个问题: App Closes with this error - requesting column name with table name 这是接近我的问题,但不完全是,或者至少我认为我已经解决了该问题中的解决方案(即创建一个_id列而不是使用一个字符串而不是我的数组中的两个字符串),仍然没有运气。 还发现了这个问题:ContactsContract query column 'display_name' does not exist 这更接近我的问题,但我认为它没有应用。也许我不理解那个答案。
这是我遇到问题的功能。
private void fillData() {
String[] from = new String[] { EventTable.COLUMN_KIDNAME,
EventTable.COLUMN_KIDRUNNINGTOTAL};
int[] to = new int[] { android.R.id.text1, android.R.id.text2 };
getLoaderManager().initLoader(0, null, this);
adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2,
null, from, to, 0);
setListAdapter(adapter);
}
在上面我将第三个参数(cursor)设置为null,我也尝试创建一个如下所示的游标并得到相同的错误。
String[] eventProjection = { EventTable.COLUMN_ID, EventTable.COLUMN_TASKITEM,
EventTable.COLUMN_KIDNAME,
EventTable.COLUMN_KIDRUNNINGTOTAL, EventTable.COLUMN_DATEDONE };
Uri fillUri = Uri.parse(MyContentProvider.CONTENT_URI + "/");
Cursor someCursor = getContentResolver().query(fillUri, eventProjection, null, null, null);
adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2,
someCursor, from, to, 0);
我不认为此功能有任何问题,但它是错误信息的一部分
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
adapter.swapCursor(data);
}
我在没有任何问题的情况下在另一个活动中查询数据库,因此我非常确信列中实际存在的列。这是数据库创建块:
public static final String TABLE_EVENT = "event";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_TASKITEM ="taskItem";
public static final String COLUMN_KIDNAME = "kidName";
public static final String COLUMN_KIDRUNNINGTOTAL = "kidRunningTotal";
public static final String COLUMN_DATEDONE = "dateDone";
// Database creation SQL statement
private static final String TABLE_CREATE = "create table "
+ TABLE_EVENT
+ "("
+ COLUMN_ID + " integer primary key autoincrement, "
+ COLUMN_TASKITEM + " text not null, "
+ COLUMN_KIDNAME + " text not null,"
+ COLUMN_KIDRUNNINGTOTAL + " float not null,"
+ COLUMN_DATEDONE + " datetime default current_timestamp"
+ ");";
public static void onCreate(SQLiteDatabase database) {
database.execSQL(TABLE_CREATE);
}
应用程序会在主要活动开始时立即抛出此错误,这当然会导致应用程序死亡。当我在上面的from字符串数组赋值中替换EventTable.COLUMN_KIDRUNNINGTOTAL的EventTable.COLUMN_ID时,它可以工作,但当然它返回记录ID列,我想要COLUMN_KIDRUNNINGTOTAL列。
我只使用一列EventTable.COLUMN_KIDNAME尝试了代码,当然修改了from和to数组以及布局,它运行正常。我已经单独尝试了所有其他列,但没有一个能够工作,当然除了COLUMN_ID。我很困惑为什么一栏有效,但其余的则没有。
这里是完整的堆栈跟踪错误。对不起,如果这很难看,我无法弄清楚如何正确发布日志。
01-03 14:33:41.580: D/AndroidRuntime(21838): Shutting down VM 01-03 14:33:41.580: W/dalvikvm(21838): threadid=1: thread exiting with uncaught exception (group=0x415c2930) 01-03 14:33:41.666: E/AndroidRuntime(21838): FATAL EXCEPTION: main 01-03 14:33:41.666: E/AndroidRuntime(21838): java.lang.IllegalArgumentException: column 'kidRunningTotal' does not exist 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303) 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:78) 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:333) 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.widget.SimpleCursorAdapter.swapCursor(SimpleCursorAdapter.java:345) 01-03 14:33:41.666: E/AndroidRuntime(21838): at net.example.OverviewActivity.onLoadFinished(OverviewActivity.java:152) 01-03 14:33:41.666: E/AndroidRuntime(21838): at net.example.OverviewActivity.onLoadFinished(OverviewActivity.java:1) 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.app.LoaderManagerImpl$LoaderInfo.callOnLoadFinished(LoaderManager.java:483) 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.app.LoaderManagerImpl$LoaderInfo.onLoadComplete(LoaderManager.java:451) 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.content.Loader.deliverResult(Loader.java:143) 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.content.CursorLoader.deliverResult(CursorLoader.java:113) 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.content.CursorLoader.deliverResult(CursorLoader.java:43) 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.content.AsyncTaskLoader.dispatchOnLoadComplete(AsyncTaskLoader.java:254) 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.content.AsyncTaskLoader$LoadTask.onPostExecute(AsyncTaskLoader.java:91) 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.os.AsyncTask.finish(AsyncTask.java:631) 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.os.AsyncTask.access$600(AsyncTask.java:177) 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.os.Handler.dispatchMessage(Handler.java:99) 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.os.Looper.loop(Looper.java:137) 01-03 14:33:41.666: E/AndroidRuntime(21838): at android.app.ActivityThread.main(ActivityThread.java:5041) 01-03 14:33:41.666: E/AndroidRuntime(21838): at java.lang.reflect.Method.invokeNative(Native Method) 01-03 14:33:41.666: E/AndroidRuntime(21838): at java.lang.reflect.Method.invoke(Method.java:511) 01-03 14:33:41.666: E/AndroidRuntime(21838): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 01-03 14:33:41.666: E/AndroidRuntime(21838): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 01-03 14:33:41.666: E/AndroidRuntime(21838): at dalvik.system.NativeStart.main(Native Method) 01-03 14:33:44.463: I/Process(21838): Sending signal. PID: 21838 SIG: 9
感谢您的帮助。