Come get l'id dal database in un clic dell'elenco di listview in android

Ho cercato attraverso varie domande relative a questo sito, ma non sono in grado di risolvere il problema che sto ottenendo.

Voglio get l'ID dal database clic su un elemento di listview

  • Dimensione di background image di attività di Android
  • Come posso accedere a tutti i drawables in android?
  • Impostare layout_column e layout_row in GridLayout in modo programmato
  • Perché sendTextMessage richiede l'authorization READ_PHONE_STATE?
  • Come si può passare più parametri primitivi a AsyncTask?
  • Traversa l'arrays IN JSONArray
  • Questa è la mia categoria di categorie:

    package com.example.reminders; import java.util.List; import android.app.ListActivity; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class Categories extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); DBAdapter db = new DBAdapter(Categories.this); db.open(); List<String> cs = db.getAllCategoriesList(); setListAdapter(new ArrayAdapter<String>(this, R.layout.activity_categories,cs)); ListView listView = getListView(); listView.setTextFilterEnabled(true); listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // When clicked, show a toast with the TextView text Cursor cur = (Cursor) parent.getItemAtPosition(position); Toast.makeText(getApplicationContext(), "id:"+id+"position:"+position+"rowid:"+cur.getInt(cur.getColumnIndex("_id")), Toast.LENGTH_LONG).show(); } }); db.close(); } } 

    la function getAllCategoriesList definita nella class DBAdapter è:

     //---retrieves all the category data--- public List<String> getAllCategoriesList() { String[] columns = new String[] {KEY_NAME2}; Cursor c = db.query(DATABASE_TABLE2, columns, null, null, null, null, KEY_NAME2); // String results = ""; List<String> results = new ArrayList<String>(); int iCM = c.getColumnIndex(KEY_NAME2); for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { results.add(c.getString(iCM)); } return results; } 

    Quando ho eseguito il codice di esempio, viene visualizzato il seguente errore:

     10-01 15:05:22.507: E/AndroidRuntime(20846): java.lang.ClassCastException: java.lang.String cannot be cast to android.database.Cursor 

  • Carica l'image da android a java servlet e salva
  • ScrollView all'interno di ViewPager, scorre automaticamente al centro
  • aprire il link del negozio google play in versione Android android
  • Comunicare tra più di 2 frammenti
  • Android 6 EditText.setError non funziona correttamente
  • alsa_aplay che non registra su android
  • One Solution collect form web for “Come get l'id dal database in un clic dell'elenco di listview in android”

    Non stai interrogando l'_id dal database (solo la colonna KEY_NAME2), quindi non sarai in grado di ottenerlo dalla scheda.

    Questa linea:

     Cursor cur = (Cursor) parent.getItemAtPosition(position); 

    è completamente sbagliato. Stai cercando di lanciare una string (che viene restituita da ArrayAdapter<String> a un cursore, che non può mai funzionare.

    Quello che devi fare è utilizzare un CursorAdapter (o SimpleCursorAdapter ) per il tuo ListView. Il cursore dovrebbe interrogare alless per _id e KEY_NAME2.

    Con questo adattatore getItem(int position) restituisce un cursore impostato sulla posizione richiesta. Quindi tutto quello che devi fare è cursor.getInt(cursor.getColumnIndex("_id")) e sei lì.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.