1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

ListActivity und onListItemClick

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von losh, 10.04.2012.

  1. losh, 10.04.2012 #1
    losh

    losh Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    10.04.2012
    hallo!
    Ich versuche derzeit vergeblich, in einer ListActivity in der onListItemClick-Methode auf die Daten im Cursor zuzugreifen:

    Code:
    public class KontakteActivity extends ListActivity 
    {
        private static final String TAG = "KontakteActivity";
        private DatabaseHelper dbHelper;
        private SQLiteDatabase dbConnection;
        private Cursor cursor;
        private static final String spalten[] = {"_id","name","telnr","email","zimmer"};    
            
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.kontakteactivity);
            setTitle(getTitle()+" - Kontakte");
            dbHelper = new DatabaseHelper(this);
            dbConnection = dbHelper.getReadableDatabase();
            cursor = dbConnection.query("lehrer", spalten, null, null, null, null, "name");
            startManagingCursor(cursor);
            SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_1,cursor,new String[] {"name"}, new int[] {android.R.id.text1});
            setListAdapter(adapter);
            dbConnection.close();
        }
        
        protected void onListItemClick(ListView l, View v, int position, long id) {
            String item = (String) getListAdapter().getItem(position);
            Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show();
        }
    }
    Beim Aufruf von onListItemClick erhalte ich
    Code:
    04-10 08:11:51.825: E/AndroidRuntime(285): FATAL EXCEPTION: main
    04-10 08:11:51.825: E/AndroidRuntime(285): java.lang.ClassCastException: android.database.sqlite.SQLiteCursor
    04-10 08:11:51.825: E/AndroidRuntime(285):     at at.spengergasse.spengerApp.view.KontakteActivity.onListItemClick(KontakteActivity.java:61)
    04-10 08:11:51.825: E/AndroidRuntime(285):     at android.app.ListActivity$2.onItemClick(ListActivity.java:321)
    04-10 08:11:51.825: E/AndroidRuntime(285):     at android.widget.AdapterView.performItemClick(AdapterView.java:284)
    04-10 08:11:51.825: E/AndroidRuntime(285):     at android.widget.ListView.performItemClick(ListView.java:3382)
    04-10 08:11:51.825: E/AndroidRuntime(285):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696)
    04-10 08:11:51.825: E/AndroidRuntime(285):     at android.os.Handler.handleCallback(Handler.java:587)
    04-10 08:11:51.825: E/AndroidRuntime(285):     at android.os.Handler.dispatchMessage(Handler.java:92)
    04-10 08:11:51.825: E/AndroidRuntime(285):     at android.os.Looper.loop(Looper.java:123)
    04-10 08:11:51.825: E/AndroidRuntime(285):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    04-10 08:11:51.825: E/AndroidRuntime(285):     at java.lang.reflect.Method.invokeNative(Native Method)
    04-10 08:11:51.825: E/AndroidRuntime(285):     at java.lang.reflect.Method.invoke(Method.java:521)
    04-10 08:11:51.825: E/AndroidRuntime(285):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    04-10 08:11:51.825: E/AndroidRuntime(285):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    04-10 08:11:51.825: E/AndroidRuntime(285):     at dalvik.system.NativeStart.main(Native Method)
    Hat jemand eine Idee, wo mein Fehler liegt??
    Danke im Voraus
     
  2. sixi, 10.04.2012 #2
    sixi

    sixi Erfahrener Benutzer

    Beiträge:
    237
    Erhaltene Danke:
    64
    Registriert seit:
    20.01.2009
    Jabb, habe eine Idee. Ich denke er liegt hier:
    Code:
    04-10 08:11:51.825: E/AndroidRuntime(285): java.lang.ClassCastException: android.database.sqlite.SQLiteCursor
    
     
  3. losh, 10.04.2012 #3
    losh

    losh Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    10.04.2012
    danke, sixi...so weit war ich auch schon;)

    hast du auch einen konkreten lösungsvorschlag?
     
  4. sixi, 10.04.2012 #4
    sixi

    sixi Erfahrener Benutzer

    Beiträge:
    237
    Erhaltene Danke:
    64
    Registriert seit:
    20.01.2009
    Naja getItem() auf den SimpleCursorAdapter sollte dir einen Cursor zurückgeben - in deinem Fall wohl ein "android.database.sqlite.SQLiteCursor". Den Versuchst du in einen String zu casten - was fehl schlägt.

    Btw. kannst du das ganze auch selber herausfinden indem du statt dem Cast einfach mal nen "System.out.println(this.getListAdapter().getItem(position))" ausgeben lässt (oder per Log.d) - da wird dir die Klasse im Normalfall ausgegeben ;-)


    edit: falls dir das noch nicht konkret genug ist, versuch es mal mit
    Code:
    Cursor c = (Cursor) getListAdapter().getItem(position);
    c.getString(0);  //wenn du nen String erwartest und es eine Spalte 0 gibt, ansonsten halt anpassen...
    
     
    maniac205 und losh haben sich bedankt.
  5. losh, 10.04.2012 #5
    losh

    losh Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    10.04.2012
    SUPER, DANKE!!! Der Zwischenschritt Cursor.getString() hat mir gefehlt.
    Jetzt klappts:
    Code:
    protected void onListItemClick(ListView l, View v, int position, long id) 
        {
            Cursor c = (Cursor) getListAdapter().getItem(position);
            Intent intent = new Intent(getBaseContext(), KontaktActivity.class);
            intent.putExtra("name", c.getString(1));
            intent.putExtra("email", c.getString(2));
            intent.putExtra("telnr", c.getString(3));
            intent.putExtra("zimmer", c.getString(4));
            startActivityForResult(intent, 0);
        }
     

Diese Seite empfehlen