Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

SimpleCursorAdapter anstatt ArrayAdapter benutzen

Das Thema "SimpleCursorAdapter anstatt ArrayAdapter benutzen" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 19.05.2009, 18:19   #1 (permalink)
Android-Hilfe.de Mitglied
 
Benutzerbild von ensacom

Registriert seit: 15.05.2009
Beiträge: 68
Abgegebene Danke: 0
Erhielt 4 Danke für 1 Beitrag
ensacom eine Nachricht über ICQ schicken ensacom eine Nachricht über MSN schicken ensacom eine Nachricht über Skype™ schicken
Reden SimpleCursorAdapter anstatt ArrayAdapter benutzen

Hallo, wer kann mir sagen wie ich den folgenden text so umstellen kann, dass ich anstatt ArrayAdapter den SimpleCursorAdapter verwenden kann?

Hier mein Quelltext

Code:
public class fahrzeuge extends ListActivity {
    SQLiteDatabase myDB = null; 
    ArrayList<String> results = new ArrayList<String>();  
    
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        
        myDB = this.openOrCreateDatabase(ensacom1.MY_DATABASE_NAME, MODE_PRIVATE, null);        
        Cursor c = myDB.rawQuery("SELECT id, name, model FROM " + ensacom1.MY_DATABASE_TABLE + ";", null);
        int kfzIDColumn  = c.getColumnIndex("id");
        int kfzNameColumn  = c.getColumnIndex("name");
        int kfzModelColumn = c.getColumnIndex("model");
        startManagingCursor(c);
        c.moveToFirst();
     
        if (c != null) {
          if (c.isFirst()) {
                 int i = 0;
              
                 do {
                      i++;
     
                      String kfzid = c.getString(kfzIDColumn);
                      String kfzname = c.getString(kfzNameColumn);
                      String kfzmodel = c.getString(kfzModelColumn);
                      results.add(kfzid + ": "+ kfzname + " - " + kfzmodel);
                 } while(c.moveToNext());
              }
        }
        this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results));
    }
__________________
HTC-Magic white
Development: Eclipse Ganymede + Android SDK 1.5
Linux Mint 6
ensacom ist offline   Mit Zitat antworten
Alt 21.05.2009, 10:12   #2 (permalink)
Erfahrener Benutzer
 
Benutzerbild von friedger

Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Standard AW: SimpleCursorAdapter anstatt ArrayAdapter benutzen

Wo hakt es denn?

Ich würde einfach etwas wie folgt machen: (ungetester Code)

Code:
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item1, cursor, new String[]{BaseColumns._ID}, new String[]{android.R.id.text1});

adapter.setCursorToStringConvert(new CursorToStringConverter(){
  public CharSequence convertToString(Cursor theCursor) 
         {               
                 String aColumnString = theCursor.getString(1); 
 String bColumnString = theCursor.getString(2); 
                 return aColumnString + "," +bColumnString; 
         } 
});
Wenn das nicht reicht kann man auch über den ViewBinder gehen und Icon, etc. setzen.
friedger ist offline   Mit Zitat antworten
Alt 21.05.2009, 10:28   #3 (permalink)
Android-Hilfe.de Mitglied
 
Benutzerbild von ensacom

Registriert seit: 15.05.2009
Beiträge: 68
Abgegebene Danke: 0
Erhielt 4 Danke für 1 Beitrag
ensacom eine Nachricht über ICQ schicken ensacom eine Nachricht über MSN schicken ensacom eine Nachricht über Skype™ schicken
Standard AW: SimpleCursorAdapter anstatt ArrayAdapter benutzen

Wo es hackt?

Es hackt bereits daran dass ich nicht genau weiß wo ich das einfügen soll.

CursorToStringAdapter kennt er gar nicht.

Ich habe ja in meinem Beispiel alle Einträge aus der Datenbank in einem array stehen das ich nun an die Liste übergeben muss. Wie ich das sehe muss ich bei SimpleCursorAdapter 2 Strings übergeben, wobei ich auch nicht weiß was BaseColumns._ID sein soll
__________________
HTC-Magic white
Development: Eclipse Ganymede + Android SDK 1.5
Linux Mint 6
ensacom ist offline   Mit Zitat antworten
Alt 21.05.2009, 11:32   #4 (permalink)
Erfahrener Benutzer
 
Benutzerbild von friedger

Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Standard AW: SimpleCursorAdapter anstatt ArrayAdapter benutzen

Hier die komplette Klasse, ich hoffe es hilft weiter. Sonst musst Du nochmal nachfragen:

Code:
package de.friedger.a.test;

import java.util.ArrayList;

import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.widget.SimpleCursorAdapter;
import android.widget.SimpleCursorAdapter.CursorToStringConverter;

public class Fahrzeuge extends ListActivity {

    SQLiteDatabase myDB = null;
    ArrayList<String> results = new ArrayList<String>();

    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        myDB = this.openOrCreateDatabase("mydb", MODE_PRIVATE, null);
        Cursor c = myDB.rawQuery("SELECT id, name, model FROM " + "myTable"
                + ";", null);        
        startManagingCursor(c);    

        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                android.R.layout.simple_list_item_1, c,
                new String[] { BaseColumns._ID },
                new int[] { android.R.id.text1 });

        adapter.setCursorToStringConverter(new CursorToStringConverter() {
            public CharSequence convertToString(Cursor theCursor) {
                String aColumnString = theCursor.getString(1);
                String bColumnString = theCursor.getString(2);
                return aColumnString + "," + bColumnString;
            }
        });

        this.setListAdapter(adapter);
    }
}
friedger ist offline   Mit Zitat antworten
Alt 21.05.2009, 12:27   #5 (permalink)
Android-Hilfe.de Mitglied
 
Benutzerbild von ensacom

Registriert seit: 15.05.2009
Beiträge: 68
Abgegebene Danke: 0
Erhielt 4 Danke für 1 Beitrag
ensacom eine Nachricht über ICQ schicken ensacom eine Nachricht über MSN schicken ensacom eine Nachricht über Skype™ schicken
Standard AW: SimpleCursorAdapter anstatt ArrayAdapter benutzen

Also gleich beim AUfrufen der activity stürzt sie ab mit unbekanntem Fehler

Was hat es mit der zeile auf sich?

Code:
new int[] { android.R.id.text1 });
Ich denke an der liegt es oder auch nicht.

Eine layout.xml brauche ich ja nicht da das Layout hier direkt im code erzeugt wird oder?
__________________
HTC-Magic white
Development: Eclipse Ganymede + Android SDK 1.5
Linux Mint 6

Geändert von ensacom (21.05.2009 um 12:34 Uhr)
ensacom ist offline   Mit Zitat antworten
Alt 21.05.2009, 12:51   #6 (permalink)
Erfahrener Benutzer
 
Benutzerbild von friedger

Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Standard AW: SimpleCursorAdapter anstatt ArrayAdapter benutzen

Wie kommst Du darauf? LogCat sagt bestimmt was anderes. Der CursorAdapter verlangt nämlich, dass es eine Spalte "_id" gibt.

Also jetzt habe ich den Code auch getestet:
Code:
package de.friedger.test;

import java.util.ArrayList;

import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.view.View;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.SimpleCursorAdapter.CursorToStringConverter;
import android.widget.SimpleCursorAdapter.ViewBinder;

public class Fahrzeuge extends ListActivity {

    SQLiteDatabase myDB = null;
    ArrayList<String> results = new ArrayList<String>();

    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        myDB = this.openOrCreateDatabase("mydb2", MODE_PRIVATE, null);
         myDB.execSQL("CREATE TABLE IF NOT EXISTS " + "myTable"
                    + " (_id integer AUTO_INCREMENT PRIMARY KEY, name varchar(100), model varchar(100), bemerkungen varchar(255), kraftstoffart varchar(100))"
                    +";");
         myDB.execSQL("INSERT INTO "+"myTable"+" (name, model, bemerkungen, kraftstoffart) "
                 +"VALUES ('Audi','TT','Keine Bemerkung','Super');");

         
        Cursor c = myDB.rawQuery("SELECT _id, name, model FROM " + "myTable"
                + ";", null);        
        startManagingCursor(c);    

        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                android.R.layout.simple_list_item_1, c,
                new String[] { "_id" },
                new int[] { android.R.id.text1 });

        adapter.setViewBinder(new ViewBinder() {
            
            @Override
            public boolean setViewValue(View view, Cursor theCursor, int column) {
                
                String aColumnString = theCursor.getString(1);
                String bColumnString = theCursor.getString(2);
                ((TextView)view).setText(aColumnString + "," + bColumnString);
                
                return true;
            }
        });

        this.setListAdapter(adapter);
    }
}
friedger ist offline   Mit Zitat antworten
Alt 21.05.2009, 12:52   #7 (permalink)
Erfahrener Benutzer
 
Benutzerbild von friedger

Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Standard AW: SimpleCursorAdapter anstatt ArrayAdapter benutzen

Und das mit dem CursorToStringConverter war Quatsch von mir. ViewBinder wird hier gebraucht!
Der Converter wird zum Beispiel beim AutoCompletion verwendet.
friedger ist offline   Mit Zitat antworten
Alt 21.05.2009, 13:07   #8 (permalink)
Android-Hilfe.de Mitglied
 
Benutzerbild von ensacom

Registriert seit: 15.05.2009
Beiträge: 68
Abgegebene Danke: 0
Erhielt 4 Danke für 1 Beitrag
ensacom eine Nachricht über ICQ schicken ensacom eine Nachricht über MSN schicken ensacom eine Nachricht über Skype™ schicken
Standard AW: SimpleCursorAdapter anstatt ArrayAdapter benutzen

Super, also das funktioniert jetzt.
Nur wie kann ich nun nach anklicken eines Eintrages in der Liste die ID auslesen?

Die will ich dann nämlich zum abfragen weiterer Daten aus der DB benutzen.
__________________
HTC-Magic white
Development: Eclipse Ganymede + Android SDK 1.5
Linux Mint 6
ensacom ist offline   Mit Zitat antworten
Alt 21.05.2009, 13:10   #9 (permalink)
Erfahrener Benutzer
 
Benutzerbild von friedger

Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Standard AW: SimpleCursorAdapter anstatt ArrayAdapter benutzen

Siehe anderer Thread. Schau Dir mal ein paar Beispiele aus den Samples an. Da kann man sich viel Code herauskopieren.
friedger ist offline   Mit Zitat antworten
Alt 21.05.2009, 13:16   #10 (permalink)
Android-Hilfe.de Mitglied
 
Benutzerbild von ensacom

Registriert seit: 15.05.2009
Beiträge: 68
Abgegebene Danke: 0
Erhielt 4 Danke für 1 Beitrag
ensacom eine Nachricht über ICQ schicken ensacom eine Nachricht über MSN schicken ensacom eine Nachricht über Skype™ schicken
Standard AW: SimpleCursorAdapter anstatt ArrayAdapter benutzen

Ja aber nur wenn man schon was mit Java gemacht hat.

Nur noch eine Frage die nur zum Teil mit dem Thema zu tun hat.

Kann man eine durch das Programm erstellte Datenbank nicht mehr löschen?
Habe es schon versucht mit

myDB.execSQL("DROP DATABASE TankPro;");

worauf das Programm aber gleich wieder abstürzt
__________________
HTC-Magic white
Development: Eclipse Ganymede + Android SDK 1.5
Linux Mint 6
ensacom ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
G1 Sim-Kontakte anzeigen/benutzen Sonnenschein T-Mobile G1 Forum 2 18.01.2010 20:40
Google g1 als Modem benutzen... GO4 T-Mobile G1 Forum 2 01.02.2009 14:01




Du liest gerade: "SimpleCursorAdapter anstatt ArrayAdapter benutzen" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.