1. Nimm jetzt an unserem Geotel Note - Gewinnspiel teil - Informationen zum Note findest Du hier!
  1. Nelson1337, 25.03.2012 #1
    Nelson1337

    Nelson1337 Threadstarter Neuer Benutzer

    Moin,

    tut mir Leid, falls diese Frage in ähnlicher Form bereits gestellt worden ist, aber ich konnte nichts brauchbares für meinen Fall finden.

    Und zwar habe ich eine Activity mit einem ListView-Element, mittels Cursor und SimpleCursorAdapter werden Daten aus der Datenbank geholt und in der ListView angezeit.
    Nun möchte ich gerne, das beim Klick auf ein Listen-Element eine weitere Ansichts-Activity startet, die den entsprechenden Eintrag vollständig zeigt.

    Ich dachte mir, man könnte das mit einer HashMap realisieren:
    Als Key die Position des Eintrages in der Liste dann einen String-Array mit den Werten aus der Datenbank.

    Code:
     
    private void bufferNotes(Cursor cursor)
            {
                cursor.moveToFirst();
                String[] data;
                while(!cursor.isAfterLast()){
                    
                    data = new String[4];
                    for(int i = 0; i < 4; i++)
                    {
                        data[i] = cursor.getString(i);
                    }    
                    mMap.put(cursor.getPosition() , data);
                    cursor.moveToNext();
                }
                
            }
    Die entsprechende Tabelle in der Datenbank enthält vier Spalten.

    In der onCreateMethode habe ich dann noch einen OnItemClickListener deklariert:

    Code:
    lv.setOnItemClickListener( new AdapterView.OnItemClickListener() {
    
                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                                long arg3) {
                            
                            Intent intent = new Intent(Liste.this, Ansicht.class);
                            intent.putExtra("values", mMap.get(position));
                            startActivity(intent);
                        }
                        
                    
                    }); 
    
    Ich erhalte eine NullPointerException. Ich tippe darauf, das die Nummerierung der Zeilen im Cursor nicht mit der Nummerrierung der Elemente in der ListView übereinstimmt.
    Wie kann ich das beheben?

    Vielen Dank im Voraus

    Gruß Nelson
     
  2. Unicate, 26.03.2012 #2
    Unicate

    Unicate Android-Experte

    Lass dir doch den entsprechenden Wert direkt vom Adapter geben, der weiß mit Sicherheit an welcher Position der entsprechende Eintrag ist.
     
  3. Nelson1337, 26.03.2012 #3
    Nelson1337

    Nelson1337 Threadstarter Neuer Benutzer

    Danke für die Antwort.

    Das Problem ist, dass der ListAdapter Daten aus mehreren Spalten aus der Datenbank bekommt.
    Die Daten liegen als String vor, und deshalb dachte ich an einen Array in der HashMap.

    Ich gehe davon aus du meinst, das mit der Übergabe der Werte aus dem Adapter folgendermaßen:

    Code:
    ListView lv = getListView(); 
    lv.setOnItemClickListener( new AdapterView.OnItemClickListener() {
    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                                long rowid) {
                            
                         Intent intent = new Intent(Liste.this, Ansicht.class);
                        intent.putExtra("values", adapter.getItem(position));
                        startActivity(intent);
                        }}); 
                    
    
    Doch wie kann ich die übergebenen Werte wieder in der anderen Acitivity verarbeiten. Ist das ein String-Array?

    Tut mir Leid, bin noch recht neu in der Entwicklung mit Java.

    Danke schonmal

    Gruß

    Nelson
     
    Zuletzt bearbeitet: 26.03.2012
  4. Tom299, 27.03.2012 #4
    Tom299

    Tom299 Android-Experte

    Du könntest auch z.B. nur die DB-ID an deine 2. Activity übergeben und dort den Datensatz komplett lesen wie du ihn brauchst, so mache ich das immer.
     
  5. Nelson1337, 27.03.2012 #5
    Nelson1337

    Nelson1337 Threadstarter Neuer Benutzer

    Ja, das wäre auch möglich , nur ich dachte mir, das wäre nicht so effizient wie, wenn ich die Daten zwischenspeichere und dann bei Bedarf den entsprechende Werte aus einer HashMap o.ä. übergebe.
     
  6. mradlmaier, 28.03.2012 #6
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Intent stellt einige Methoden bereit um komplexe Datenstrukturen ins "Extra" zu lesen und schreiben, darunter auch StringArrays (putStringArrayExtra()/getStringArrayExtra()) bis hin zu beliebigen Objekten (putParcelableExtra()/getParcelableExtra()) bereit. Objekte müssen dazu das Parcelable Interface implementieren.
     
Die Seite wird geladen...
Ähnliche Themen - HashMap mit Intent Forum Datum
Dynamische Einträge mit HashMap? Android App Entwicklung 11.11.2016
[ERLEDIGT] put in HashMap bringt App zum abstürzen Android App Entwicklung Montag um 11:27 Uhr
HashMap verwirrt mich Android App Entwicklung 22.11.2016
[Meinung] Spezielle App für Mittelstand erstellen (lassen) Android App Entwicklung Gestern um 17:40 Uhr
[ERLEDIGT] Problem mit Async Task und auszuführender Aufgabe Android App Entwicklung 02.05.2017
[ERLEDIGT] Probleme mit Wear Modul Android App Entwicklung 01.05.2017
[OFFEN] Probleme mit SearchView in ArrayAdapter Android App Entwicklung 28.04.2017
[ERLEDIGT] Listview mit Datenbank über Custom ArrayList verbinden Android App Entwicklung 22.04.2017
[ERLEDIGT] Drawer mit scrollbarem Listview Android App Entwicklung 27.03.2017
[ERLEDIGT] Popup mit Fragment realisieren oder besser eine andere Klasse nehmen? Android App Entwicklung 22.03.2017

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. hashmap übergeben java