Android 获取从数据库填充的微调器项的行id

Android 获取从数据库填充的微调器项的行id,android,sqlite,spinner,Android,Sqlite,Spinner,我有一个从数据库填充的微调器,当我选择一个项目时,我想返回数据库中该项目的行id(主键); 这是我的代码: private int getcategoryrowid(Spinner spinner){ AndroidOpenDbHelper openHelperClass = new AndroidOpenDbHelper(this); // Then we need to get a readable database

我有一个从数据库填充的微调器,当我选择一个项目时,我想返回数据库中该项目的行id(主键); 这是我的代码:

private int getcategoryrowid(Spinner spinner){                  

        AndroidOpenDbHelper openHelperClass = new AndroidOpenDbHelper(this);

        // Then we need to get a readable database
        SQLiteDatabase sqliteDatabase = openHelperClass.getReadableDatabase();


        //
        Cursor cursor1 = (Cursor) (spinner.getSelectedItem());
        String t=String.valueOf(spinner.getSelectedItem());
        System.out.println(t);
        int rowid = cursor1.getInt(cursor1.getColumnIndex("_id"));
        System.out.println(rowid);
         cursor1.close();
         sqliteDatabase.close();
        return rowid;
}

这就是logcat:

06-14 16:02:01.840: W/dalvikvm(14081): threadid=1: thread exiting with uncaught exception (group=0x40015560)
06-14 16:02:01.880: E/AndroidRuntime(14081): FATAL EXCEPTION: main
06-14 16:02:01.880: E/AndroidRuntime(14081): java.lang.ClassCastException: java.lang.String
06-14 16:02:01.880: E/AndroidRuntime(14081):    at com.app.pfe.Addfile.getcategoryrowid(Addfile.java:345)
06-14 16:02:01.880: E/AndroidRuntime(14081):    at com.app.pfe.Addfile.onClick(Addfile.java:85)
06-14 16:02:01.880: E/AndroidRuntime(14081):    at android.view.View.performClick(View.java:2485)
06-14 16:02:01.880: E/AndroidRuntime(14081):    at android.view.View$PerformClick.run(View.java:9080)
06-14 16:02:01.880: E/AndroidRuntime(14081):    at android.os.Handler.handleCallback(Handler.java:587)
06-14 16:02:01.880: E/AndroidRuntime(14081):    at android.os.Handler.dispatchMessage(Handler.java:92)
06-14 16:02:01.880: E/AndroidRuntime(14081):    at android.os.Looper.loop(Looper.java:123)
06-14 16:02:01.880: E/AndroidRuntime(14081):    at android.app.ActivityThread.main(ActivityThread.java:3683)
06-14 16:02:01.880: E/AndroidRuntime(14081):    at java.lang.reflect.Method.invokeNative(Native Method)
06-14 16:02:01.880: E/AndroidRuntime(14081):    at java.lang.reflect.Method.invoke(Method.java:507)
06-14 16:02:01.880: E/AndroidRuntime(14081):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-14 16:02:01.880: E/AndroidRuntime(14081):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-14 16:02:01.880: E/AndroidRuntime(14081):    at dalvik.system.NativeStart.main(Native Method)

我的代码有什么问题?

为什么要有一个完整的单独类?您可以通过
onItemSelected
方法获得它,因为它在传入的参数中提供给您(它是
长id
部分)

spinner.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
未选择公共无效(AdapterView父级){
}
@凌驾
已选择公共位置(AdapterView父项、视图、整数位置、长id){
长rowId=id;
}
});

在顶部创建活动的上下文

public Context cntx = this;
现在添加cntx,如下所示:

AndroidOpenDbHelper openHelperClass = new AndroidOpenDbHelper(cntx);

cursorcursor1=(Cursor)(spinner.getSelectedItem())什么?Thaannnnnnnks,这很有帮助,我如何获得rowId的值,我使用long id=rowId,但它告诉我rowId不能解析为变量,我如何返回这个值你已经得到了它,id已经声明并传递到方法中。您需要将其设置为自己的变量。我的示例声明了变量rowId,然后将其设置为id(框架传入的数据库行id)。然后使用rowId。如果您在
onItemSelected
方法之外需要它,请将
rowId
创建为类变量;但是我创建了一个全局vraible rawid,然后在这段代码之后,我设置了rowid=rowid,但它始终返回0,似乎setOnItemSelectedStener没有被执行,我不知道为什么。在选择的
方法中,将全局变量设置为等于
id
。因此,您将拥有
yourVariable=id。每次您更改微调器选择时,它都应该更改(只要您的db正确设置了一个名为
\u id
的列,并且该列位于光标中,我认为这是因为如果没有,框架会抱怨,而您没有提到这一点)。
AndroidOpenDbHelper openHelperClass = new AndroidOpenDbHelper(cntx);