HashMap mit Intent übergeben

N

Nelson1337

Neues Mitglied
0
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
 
Lass dir doch den entsprechenden Wert direkt vom Adapter geben, der weiß mit Sicherheit an welcher Position der entsprechende Eintrag ist.
 
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:
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.
 
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.
 
Nelson1337 schrieb:
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.

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.
 

Ähnliche Themen

M
Antworten
8
Aufrufe
945
deek
D
B
Antworten
4
Aufrufe
432
bb321
B
FabianDev
Antworten
5
Aufrufe
530
swa00
swa00
Zurück
Oben Unten