1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung 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 Forum Datum
[OFFEN] Bild per Intent an ListView übergeben und anzeigen Android App Entwicklung 13.08.2017
[ERLEDIGT] Widget reagiert nicht auf Click mit anschliessendem Http-Request Android App Entwicklung 04.07.2017
[ERLEDIGT] Espresso Tests RuntimeException: Could not launch intent Android App Entwicklung 30.06.2017
[OFFEN] Welches Intent erzeugt der Klick im Homescreen auf das Icon einer App? Android App Entwicklung 20.06.2017
[ERLEDIGT] Eine Klasse um das aufrufen anderer Intents zu regeln Android App Entwicklung 24.05.2017
[ERLEDIGT] put in HashMap bringt App zum abstürzen Android App Entwicklung 22.05.2017
[ERLEDIGT] Problem beim Starten einer neuen Activity Android App Entwicklung 21.03.2017
Intent mit Daten (putExtra) zu anderer Activity Android App Entwicklung 14.02.2017
HashMap verwirrt mich Android App Entwicklung 22.11.2016
Dynamische Einträge mit HashMap? Android App Entwicklung 11.11.2016

Users found this page by searching for:

  1. hashmap übergeben java

Du betrachtest das Thema "HashMap mit Intent übergeben" im Forum "Android App Entwicklung",