2013-02-26 1 views
0

У меня есть две таблицы в базе данных Sqlite. Столбцы первой таблицы: _id, name. Столбцы второй таблицы: _cid, Category.java.lang.RuntimeException: не удалось запустить Activity {package_name.ActivityClass}: java.IllegalArgumentException: column '_id' не существует

Я извлекаю данные из второй таблицы в ListView используя SimpleCursorAdapter. В журналах я вижу RuntimeException и java.IllegalArgumentException: column '_id' does not exist.

активность:

public class ActivityClass extends ListActivity{ 

private CursorAdapter curCateAdapter; 
private ListView cateListview; 
SimpleCursorAdapter adapter;  
@SuppressWarnings("deprecation") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    cateListview=getListView(); 
    final DatabaseConnector database = new DatabaseConnector(NoteCategoryActivity.this); 
    Cursor myCursor=database.getAllCategory(); 
    String[] from = new String[] {"Category"}; 
    int[] to = new int[] { R.id.cateTextView }; 
    adapter= new SimpleCursorAdapter(this, R.layout.category_list, 
        myCursor, 
        from, to); 
    cateListview.setAdapter(adapter); 
} 
} 

DatabaseHelper класс:

public class DatabaseHelper { 

private static final String DB_NAME = "NameDB.db"; 
private static final String TABLE_NAME1 = "table1"; 
private static final String TABLE_NAME2 = "Categories"; 
private static final String KEY_ID="_id"; 
private static final String KEY_NAME="Name"; 
public static final String KEY_NCID="_cid"; 
public static final String KEY_CAT="Category"; 
private SQLiteDatabase database; 
private DatabaseOpenHelper dbOpenHelper; 

    public Cursor getAllCategory() { 
    database=dbOpenHelper.getWritableDatabase(); 
    Cursor mCursor =database.query("Categories", new String[]{"_cid","Category"}, null, null, null, null, null); 
    if (mCursor != null) { 
mCursor.moveToFirst(); 
      } 
    return mCursor; 
} 

В category_list.xml, я определяю RelativeLayout, используемый в этом файле:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/cateTextView" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textSize="18sp" 
     android:gravity="center_vertical" 
     /> 
</RelativeLayout> 

logcat выход:

02-26 15:17:35.729: E/AndroidRuntime(17757): FATAL EXCEPTION: main 
02-26 15:17:35.729: E/AndroidRuntime(17757): java.lang.RuntimeException: Unable to start activity ComponentInfo{packagename.MyActivity}: java.lang.IllegalArgumentException: column '_id' does not exist 
02-26 15:17:35.729: E/AndroidRuntime(17757):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
02-26 15:17:35.729: E/AndroidRuntime(17757):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
02-26 15:17:35.729: E/AndroidRuntime(17757):at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
02-26 15:17:35.729: E/AndroidRuntime(17757):at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
02-26 15:17:35.729: E/AndroidRuntime(17757):at android.os.Handler.dispatchMessage(Handler.java:99) 
02-26 15:17:35.729: E/AndroidRuntime(17757):at android.os.Looper.loop(Looper.java:123) 
02-26 15:17:35.729: E/AndroidRuntime(17757):at android.app.ActivityThread.main(ActivityThread.java:3683) 
02-26 15:17:35.729: E/AndroidRuntime(17757):at java.lang.reflect.Method.invokeNative(Native Method) 
02-26 15:17:35.729: E/AndroidRuntime(17757):at java.lang.reflect.Method.invoke(Method.java:507) 
02-26 15:17:35.729: E/AndroidRuntime(17757):at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
02-26 15:17:35.729: E/AndroidRuntime(17757): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
02-26 15:17:35.729: E/AndroidRuntime(17757): at dalvik.system.NativeStart.main(Native Method) 
02-26 15:17:35.729: E/AndroidRuntime(17757): Caused by: java.lang.IllegalArgumentException: column '_id' does not exist 
02-26 15:17:35.729: E/AndroidRuntime(17757): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314) 
02-26 15:17:35.729: E/AndroidRuntime(17757): at android.widget.CursorAdapter.init(CursorAdapter.java:111) 
02-26 15:17:35.729: E/AndroidRuntime(17757): at android.widget.CursorAdapter.<init>(CursorAdapter.java:90) 
02-26 15:17:35.729: E/AndroidRuntime(17757): at android.widget.ResourceCursorAdapter.<init>(ResourceCursorAdapter.java:47) 
02-26 15:17:35.729: E/AndroidRuntime(17757): at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:84) 
02-26 15:17:35.729: E/AndroidRuntime(17757): at intuition.itlabs.app.makenotes.MyActivity.onCreate(NoteCategoryActivity.java:39) 
02-26 15:17:35.729: E/AndroidRuntime(17757): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
+0

Опубликовать полный вывод logcat –

+0

is column _id присутствует в db. – ManishL

+0

@ManishL, да, он присутствует в db, но в первой таблице, а не во второй – PSK

ответ

1

Для правильной работы SimpleCursorAdapter необходим столбец _id. При выборе данных вы должны указать свой столбец идентификатора: «_cid as _id». Use google.

+0

спасибо @Leonidos работает против меня. – PSK