column '_id' does not exist ExpandableListAdapter

  • Antworten:4
  • Bentwortet
Sebastian Klaiber
  • Forum-Beiträge: 44

19.12.2010, 11:38:58 via Website

Hi,

ich arbeite gerade an einer APP, bei der ich einen ExpandableListAdapter verwende die Daten für die Liste kommen aus einer Datenbank mit 2 Tabllen, Item, Category. Nun bekomm ich aber bei Logcat diese Fehlermeldung das die Spalte „_id“ nicht existiert, in meiner Tabelle Catagory definiere ich aber diese Spalte. Hab leider gerade keine Idee an was das liegen kann. Danke für eure Hilfe!

112-19 11:34:30.890: ERROR/AndroidRuntime(224): Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
212-19 11:34:30.890: ERROR/AndroidRuntime(224): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314)
312-19 11:34:30.890: ERROR/AndroidRuntime(224): at de.android.shoppinglist.CategoriesAdapter.getGroupId(CategoriesAdapter.java:60)
412-19 11:34:30.890: ERROR/AndroidRuntime(224): at android.widget.ExpandableListConnector.getItemId(ExpandableListConnector.java:422)
512-19 11:34:30.890: ERROR/AndroidRuntime(224): at android.widget.AdapterView.getItemIdAtPosition(AdapterView.java:745)
612-19 11:34:30.890: ERROR/AndroidRuntime(224): at android.widget.AdapterView.setSelectedPositionInt(AdapterView.java:1081)
712-19 11:34:30.890: ERROR/AndroidRuntime(224): at android.widget.ListView.setAdapter(ListView.java:445)
812-19 11:34:30.890: ERROR/AndroidRuntime(224): at android.widget.ExpandableListView.setAdapter(ExpandableListView.java:475)
912-19 11:34:30.890: ERROR/AndroidRuntime(224): at android.app.ExpandableListActivity.setListAdapter(ExpandableListActivity.java:246)
1012-19 11:34:30.890: ERROR/AndroidRuntime(224): at de.android.shoppinglist.ShoppingList.loadCategories(ShoppingList.java:208)
1112-19 11:34:30.890: ERROR/AndroidRuntime(224): at de.android.shoppinglist.ShoppingList.onCreate(ShoppingList.java:60)
1212-19 11:34:30.890: ERROR/AndroidRuntime(224): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
1312-19 11:34:30.890: ERROR/AndroidRuntime(224): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
1412-19 11:34:30.890: ERROR/AndroidRuntime(224): ... 11 more

getGroupId vom ExpandableListAdapter
1public long getGroupId(int groupPosition) {
2 Cursor categoriesCursor = (Cursor) getGroup(groupPosition);
3 if (categoriesCursor != null && !categoriesCursor.isNull(groupPosition)) {
4 return categoriesCursor.getInt(categoriesCursor.getColumnIndexOrThrow(Category.ID));
5
6 }
7 return -1;
8 }

1public class Category {
2
3 public static final String TABLE_NAME = "catagories";
4 public static final String ID = "_id";
5 public static final String NAME = "name";
6 public static final String CREATED_AT = "created_at";
7 public static final String SQL_CREATE = "CREATE TABLE " + TABLE_NAME + " ("
8 + ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + NAME + " TEXT,"
9 + CREATED_AT + " TIMESTAMP" + ");";
10}

Hoffe der Code reicht ansonsten stell ich den Rest auch noch gerne zur Verfügung

chao

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

19.12.2010, 11:55:07 via Website

Denke der Adapter ist das Problem, poste diesem mal komplett.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Sebastian Klaiber
  • Forum-Beiträge: 44

19.12.2010, 11:56:14 via Website

1package de.android.shoppinglist;
2
3import de.android.shoppinglist.models.Category;
4import de.android.shoppinglist.models.Item;
5import android.content.Context;
6import android.database.Cursor;
7import android.database.sqlite.SQLiteDatabase;
8import android.util.Log;
9import android.view.Gravity;
10import android.view.View;
11import android.view.ViewGroup;
12import android.widget.AbsListView;
13import android.widget.BaseExpandableListAdapter;
14import android.widget.TextView;
15import de.android.shoppinglist.models.ShoppingListDatabaseHelper;
16
17public class CategoriesAdapter extends BaseExpandableListAdapter {
18 private Context mContext;
19
20 private ShoppingListDatabaseHelper mDbHelper;
21 private SQLiteDatabase mDb;
22
23 private Cursor mCategoriesCursor;
24 private Cursor mItemsCursor;
25
26 public CategoriesAdapter(Context context, SQLiteDatabase db, Cursor categoriesCursor) {
27 mContext = context;
28 mDb = db;
29 mCategoriesCursor = categoriesCursor;
30 }
31
32 public int getGroupCount() {
33 return mCategoriesCursor.getCount();
34 }
35
36 public int getChildrenCount(int groupPosition) {
37 Cursor itemsCursor = Item.findAllByCategoryId(mDb, getGroupId(groupPosition));
38 int count = itemsCursor.getCount();
39// itemsCursor.close();
40 return count;
41 }
42
43 public Object getGroup(int groupPosition) {
44 mCategoriesCursor.moveToPosition(groupPosition);
45 if (mCategoriesCursor != null) {
46 return mCategoriesCursor;
47 }
48 return null;
49 }
50
51 public Object getChild(int groupPosition, int childPosition) {
52 mItemsCursor = Item.findAllByCategoryId(mDb, getGroupId(groupPosition));
53 mItemsCursor.moveToPosition(childPosition);
54 return mItemsCursor;
55 }
56
57 public long getGroupId(int groupPosition) {
58 Cursor categoriesCursor = (Cursor) getGroup(groupPosition);
59 if (categoriesCursor != null && !categoriesCursor.isNull(groupPosition)) {
60 return categoriesCursor.getInt(categoriesCursor.getColumnIndexOrThrow(Category.ID));
61
62 }
63 return -1;
64 }
65
66 public long getChildId(int groupPosition, int childPosition) {
67 Cursor itemsCursor = (Cursor) getChild(groupPosition, childPosition);
68 int id = itemsCursor.getInt(itemsCursor.getColumnIndexOrThrow(Item.ID));
69// itemsCursor.close();
70 return id;
71 }
72
73 public boolean hasStableIds() {
74 return true;
75 }
76
77 public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
78 Cursor categoriesCursor = (Cursor) getGroup(groupPosition);
79 if (categoriesCursor != null) {
80 TextView textView = getGenericView();
81 textView.setText(categoriesCursor.getString(mCategoriesCursor.getColumnIndexOrThrow(Category.NAME)));
82 return textView;
83 }
84 return null;
85 }
86
87 public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
88 TextView textView = getGenericView();
89 Cursor itemsCursor = (Cursor) getChild(groupPosition, childPosition);
90 if (itemsCursor != null) {
91 textView.setText(itemsCursor.getString(itemsCursor.getColumnIndexOrThrow(Item.NAME)));
92// itemsCursor.close();
93 }
94 return textView;
95 }
96
97 public boolean isChildSelectable(int groupPosition, int childPosition) {
98 return true;
99 }
100
101 public TextView getGenericView() {
102 AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 34);
103
104 TextView textView = new TextView(mContext);
105 textView.setLayoutParams(lp);
106 textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
107 textView.setPadding(36, 0, 0, 0);
108 return textView;
109 }
110
111}

Antworten
Sebastian Klaiber
  • Forum-Beiträge: 44

19.12.2010, 18:03:06 via Website

Hi,

habe das Problem selbst gelöst! Das Problem war die Abfrage von der Datenbank!

Habe dem raw Query bei catagorie._id nen alias angehängt nun geht es!
1public static Cursor findAllWithItems(SQLiteDatabase db) {
2 Cursor category_cursor = db.rawQuery("SELECT catagories._id AS _id, catagories.name AS name FROM catagories, items WHERE catagories._id =
3 items.category_id GROUP BY catagories._id;", null);
4 return category_cursor;
5 }

Antworten
Richard Raue
  • Forum-Beiträge: 1

03.05.2011, 00:28:35 via Website

Super, die Info hab ich gebraucht. Danke dir! :-)

Antworten