我的Android应用程序遇到了问题。在我的应用程序中,我试图获取特定的列名称。这在ListView
中完美运行,但在其他任何地方都没有。在我的ListView
中,我有这个:
SimpleCursorAdapter customers = new SimpleCursorAdapter(this,R.layout.foodresult, cursor, from, to);
mListView = (ListView) findViewById(R.id.list);
mListView.setAdapter(customers);
// Define the on-click listener for the list items
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Get the cursor, positioned to the corresponding row in the result set
cursor = (Cursor) mListView.getItemAtPosition(position);
String name = cursor.getString(cursor.getColumnIndexOrThrow("customer"));
String caloriescursor = cursor.getString(cursor.getColumnIndexOrThrow("name"));
String totalfat = cursor.getString(cursor.getColumnIndexOrThrow("address"));
String satfatcursor = cursor.getString(cursor.getColumnIndexOrThrow("city"));
String state = cursor.getString(cursor.getColumnIndexOrThrow("state"));
String zipCode = cursor.getString(cursor.getColumnIndexOrThrow("zipCode"));
String carbo = cursor.getString(cursor.getColumnIndexOrThrow("carb"));
String fiber = cursor.getString(cursor.getColumnIndexOrThrow("fiber"));
String sugar = cursor.getString(cursor.getColumnIndexOrThrow("sugar"));
String protein = cursor.getString(cursor.getColumnIndexOrThrow("protein"));
String salt = cursor.getString(cursor.getColumnIndexOrThrow("salt"));
String sat_fat = cursor.getString(cursor.getColumnIndexOrThrow("city"));
但是在ListView之外,我不能这样做。这是我在另一种方法中所做的。
mDbHelper mDbHelper = new DBAdapter(DatabaseFiller.this);
mDbHelper.open();
Cursor c = mDbHelper.returnAllColumns();
String protein = c.getString(c.getColumnIndexOrThrow("protein"));
String salt = c.getString(c.getColumnIndexOrThrow("salt"));
String sat_fat = c.getString(c.getColumnIndexOrThrow("city"));
这是我的returnAllColumns()方法。
public Cursor returnAllColumns() {
Cursor cursor = mDb.query(FTS_VIRTUAL_TABLE,
new String[] {KEY_ROWID,
KEY_NAME,
KEY_CUSTOMER}
, null, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
}
return cursor;
}
这是我的LogCat:
java.lang.IllegalArgumentException: column 'protein' does not exist
at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303)
at com.example.foodsaver2.DatabaseFiller$1.onClick(DatabaseFiller.java:142)
at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:941)
at android.widget.AdapterView.performItemClick(AdapterView.java:299)
at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904)
at android.widget.AbsListView$3.run(AbsListView.java:3638)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
所以我做错了什么。我以前没有使用SQLite的经验。我一直在墙上撞了一会儿。关于这个问题的任何帮助将不胜感激。
答案 0 :(得分:1)
使用
new String[] {KEY_ROWID, KEY_NAME, KEY_CUSTOMER}
在您的查询方法调用中,您仅限于返回这些列。要获取所有列,您应该将null作为第二个参数而不是数组传递。