2013-05-13 80 views
1

我已经创建了一个应用程序,其中listview从数据库中填充。现在我想在烤面包中看到值的细节点击。我怎样才能得到点击行的数据?获取列表视图中选定行的数据

下面是我的.java网页..

public class ListviewActivity extends ListActivity{ 

ListView mListView; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.listlayout); 
    mListView=(ListView)findViewById(R.id.list); 

    DbAdapter dbHelper = new DbAdapter(this); 
     dbHelper.open(); 

     // Get a Cursor for the list items 
     Cursor listCursor = dbHelper.fetchListItems(); 
     startManagingCursor(listCursor); 

     // set the custom list adapter 
     setListAdapter(new MyListAdapter(this, listCursor)); 

     mListView = getListView(); 
     mListView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, int position,long id){ 
       String val=(String)(mListView.getItemAtPosition(position)); 

       Toast.makeText(ListviewActivity.this,position, Toast.LENGTH_SHORT).show(); 

      } 
     }); 


} 

当我点击某一行上的应用程序被强行以下错误关闭:

E/AndroidRuntime(13011): FATAL EXCEPTION: main 
E/AndroidRuntime(13011): java.lang.ClassCastException: android.database.sqlite.SQLiteCursor 
E/AndroidRuntime(13011): at com.android.pickuplistview.ListviewActivity$1.onItemClick(ListviewActivity.java:38) 
E/AndroidRuntime(13011): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 
E/AndroidRuntime(13011): at android.widget.ListView.performItemClick(ListView.java:3382) 
E/AndroidRuntime(13011): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696) 
E/AndroidRuntime(13011): at android.os.Handler.handleCallback(Handler.java:587) 
E/AndroidRuntime(13011): at android.os.Handler.dispatchMessage(Handler.java:92) 
E/AndroidRuntime(13011): at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime(13011): at android.app.ActivityThread.main(ActivityThread.java:4627) 
E/AndroidRuntime(13011): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(13011): at java.lang.reflect.Method.invoke(Method.java:521) 
E/AndroidRuntime(13011): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
E/AndroidRuntime(13011): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
E/AndroidRuntime(13011): at dalvik.system.NativeStart.main(Native Method) 

我的DB适配器页面在这里给出:

public class DbAdapter { 
private static final String DB_NAME = "ListData"; 
    private static final String TABLE_ITEMS = "itemslist"; 
    public static final String COL_ID = "_id"; 
    public static final String COL_ITEMS = "items"; 
    public static final String COL_NAME = "name"; 
    public static final String COL_ADDRESS = "address"; 
    public static final String COL_STATUS="status"; 

    private static final int DB_VERSION = 1; 

    private final Context mCtx; 
    private DatabaseHelper mDbHelper; 
    private SQLiteDatabase mDb; 

    private static final String CREATE_DB_TABLE_DATES = 

     "CREATE TABLE "+TABLE_ITEMS+" ("+ 
      COL_ID +" INTEGER PRIMARY KEY AUTOINCREMENT, "+ 
      COL_ITEMS + " TEXT NOT NULL, " + 
      COL_NAME + " TEXT, " + 
      COL_ADDRESS + " TEXT, " + 
      COL_STATUS + " TEXT " + 
      ");"; 

    private static final String CREATE_TEST_DATA1 = 
     "INSERT INTO "+TABLE_ITEMS+ 
      " ("+ 
       COL_ITEMS+","+ 
       COL_NAME+","+ 
       COL_ADDRESS+","+ 
       COL_STATUS+ 
       ") VALUES (" + 
       "'Gems',"+ 
       "'KAJU',"+ 
       "'Behala',"+ 
       "'DELIVERED'"+ 
       ");"; 

    private static final String CREATE_TEST_DATA2 = 
     "INSERT INTO "+TABLE_ITEMS+ 
     " ("+ 
     COL_ITEMS+","+ 
     COL_NAME+","+ 
     COL_ADDRESS+","+ 
     COL_STATUS+ 
     ") VALUES (" + 
     "'Eclairs',"+ 
     "'BIJU',"+ 
     "'Joka',"+ 
     "'PENDING'"+ 
      ");"; 

    private static final String CREATE_TEST_DATA3 = 
     "INSERT INTO "+TABLE_ITEMS+ 
     " ("+ 
     COL_ITEMS+","+ 
     COL_NAME+","+ 
     COL_ADDRESS+","+ 
     COL_STATUS+ 
     ") VALUES (" + 
     "'Donut',"+ 
     "'RAJU',"+ 
     "'Kasba',"+ 
     "'DELIVERED'"+ 
      ");"; 

    private static class DatabaseHelper extends SQLiteOpenHelper { 

     DatabaseHelper(Context context) { 
      super(context, DB_NAME, null, DB_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      db.execSQL(CREATE_DB_TABLE_DATES); 
      db.execSQL(CREATE_TEST_DATA1); 
      db.execSQL(CREATE_TEST_DATA2); 
      db.execSQL(CREATE_TEST_DATA3); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

      // if the new version is higher than the old version, 
      // delete existing tables: 
      if (newVersion > oldVersion) { 
       db.execSQL("DROP TABLE IF EXISTS " + TABLE_ITEMS); 
       onCreate(db); 
      } else { 
       // otherwise, create the database 
       onCreate(db); 
      } 

     } 

    } 

    /** 
    * Constructor - takes the context to allow the database to be 
    * opened/created 
    * 
    * @param ctx the Context within which to work 
    */ 
    public DbAdapter(Context ctx) { 
     this.mCtx = ctx; 
    } 

    public DbAdapter open() throws SQLException { 
     mDbHelper = new DatabaseHelper(mCtx); 
     mDb = mDbHelper.getWritableDatabase(); 
     return this; 
    } 

    public void close() { 
     mDbHelper.close(); 
    } 

    public Cursor fetchListItems() { 

     Cursor cursor = 
      mDb.query(TABLE_ITEMS, new String[] 
         {COL_ID, COL_ITEMS, COL_NAME, COL_ADDRESS, COL_STATUS}, 
         null, null, null, null, null, null); 

     if (cursor != null) { 
      cursor.moveToFirst(); 
     } 
     return cursor; 
    } 

}

回答

2

它看起来像你想投一个光标为String:

String val=(String)(mListView.getItemAtPosition(position)); 

至少,这个错误是什么使得它是:

java.lang.ClassCastException: android.database.sqlite.SQLiteCursor 

尝试获得一个字符串表示来自Cursor的数据,而不是直接将Cursor强制转换为字符串。

编辑:

A光标包含指向存储在数据库中的信息。不知道你的数据库是如何构建的,我不可能真的为你做到这一点。但是,您可以尝试以下格式:

String val = mListView.getItemAtPosition(position).getString(columnIndexInteger); 

其中columnIndexInteger是该列的整数值。如果你不知道它,但有一个String名字,你可以通过getColumnIndex()来获得它。如果是这样的情况下,调整此:

Cursor c = (Cursor)mListView.getItemAtPosition(position); 
String val = c.getString(c.getColumnIndex(DbAdapter.COL_NAME)); 

,上面一行是设置VAL与COL_NAME相关的数据库记录

+0

如何做到这一点??请给我exmaple或它会更好,如果你编辑我的code.I'm非常ameteur在android.Looking向前为您的帮助。请。 – 2013-05-13 13:46:24

+0

看看上面的 – Guardanis 2013-05-13 13:51:35

+0

我已附上我的数据库页面...请检查它 – 2013-05-13 13:59:42

0

这种异常出现,因为要传递的整数值敬酒massage.Toast需要焦炭sequence.So replate你行

Toast.makeText(ListviewActivity.this,position, Toast.LENGTH_SHORT).show(); 

Toast.makeText(ListviewActivity.this,position+"", Toast.LENGTH_SHORT).show(); 

上的ListView点击。

+0

非常感谢您的帮助......但同样的问题仍然存在:( – 2013-05-13 13:22:00

+0

但sgould不会在更换这行后,因为我检查了它在我的末端 – 2013-05-13 13:26:44

+0

,但在我的应用程序它给出了与以前相同的错误:(:( – 2013-05-13 13:37:42

相关问题