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

HashMap mit Intent übergeben

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Nelson1337, 25.03.2012.

  1. Nelson1337, 25.03.2012 #1
    Nelson1337

    Nelson1337 Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    25.03.2012
    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

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    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

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    25.03.2012
    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

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    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

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    25.03.2012
    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

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    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.
     

Diese Seite empfehlen

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. hashmap übergeben java