无法检索ListView外的列

时间:2014-02-14 00:47:13

标签: java android android-sqlite

我的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的经验。我一直在墙上撞了一会儿。关于这个问题的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用

new String[] {KEY_ROWID, KEY_NAME, KEY_CUSTOMER}

在您的查询方法调用中,您仅限于返回这些列。要获取所有列,您应该将null作为第二个参数而不是数组传递。