2012-04-12 2 views
1

J'ai besoin d'aide pour créer un listview qui montre les éléments d'une base de données sql .. pour d'abord créé une petite mise en page xml avec 3 champs TextView avec id: Text1,Text2 and Text3 et un listview dans mon activité. après avoir regroupé les colonnes dans une interfaceAndroid: Sqlite sur ListView

public interface TableRegistry extends BaseColumns{ 

    String TABLE_NAME = "Registry"; 

    String TYPE = "Type"; 
    String DATE = "Date"; 
    String STATUS = "Status"; 
    String NUMBER = "Number"; 
    String MESSAGE = "Message"; 
    String OTHER = "Other"; 

    String[] COLUMNS = new String[] 
       { _ID, TYPE, DATE, STATUS, NUMBER, MESSAGE, OTHER }; 
      } 

Après avoir créé la classe de base de données ..

public class APdatabaseClass extends SQLiteOpenHelper { 

    private static final String DATABASE_NAME = "APdatabase"; 
    private static final int DATABASE_VERSION = 1; 

    public APdatabaseClass(Context context) { 
     super(context, DATABASE_NAME , null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     String sql = "CREATE TABLE {0} ({1} INTEGER PRIMARY KEY AUTOINCREMENT," + 
       " {2} TEXT NOT NULL,{3} TEXT NOT NULL,{4} TEXT NOT NULL,{5} TEXT NOT NULL,{6} TEXT NOT NULL, {7} TEXT NOT NULL);"; 
      db.execSQL(MessageFormat.format(sql, TableRegistry.TABLE_NAME, TableRegistry._ID, 
       TableRegistry.TYPE, TableRegistry.DATE, TableRegistry.STATUS, TableRegistry.NUMBER, TableRegistry.MESSAGE, TableRegistry.OTHER)); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     // Drop older table if existed 
     db.execSQL("DROP TABLE IF EXISTS " + TableRegistry.TABLE_NAME); 

     // Create tables again 
     onCreate(db);  
    } 

Maintenant, comment puis-je connecter ma base de données à LISTVIEW dans mon activité avec SimpleCursorAdapter ou quelque chose? J'ai besoin de remplir les 3 champs TextView avec:

TableRegistry.TYPE, TableRegistry.DATE, TableRegistry.STATUS. 

merci d'avance!

Répondre

2

Il semble que vous allez un peu de travail supplémentaire. Voilà comment je le fais normalement:

d'abord créer méthode dans votre assistant de base de données pour récupérer les informations que vous souhaitez:

public Cursor fetchListData() { 
    return mDb.query(TableRegistry.TABLE_NAME, new String[] { TableRegistry._ID, 
     TableRegistry.TYPE, TableRegistry.DATE, TableRegistry.STATUS }, null,null, 
     null, null, null); 
} 

Ensuite, quelle que soit la classe que vous voulez créer la liste:

APdatabaseClass mDbHelper = new APdatabaseClass(getActivity()); 
mDbHelper.open(); 

Cursor c = fetchListData(); 
getActivity().startManagingCursor(c); 

String[] from = new String[] { TableRegistry.TYPE, TableRegistry.DATE, TableRegistry.STATUS }; 
int[] to = new int[] { R.id.Text1, R.id.Text2, R.id.Text3 }; 
SimpleCursorAdapter data = new SimpleCursorAdapter(getActivity(), R.layout.yourlistlayout, c, from, to); 
setListAdapter(data); 

Notez que cela suppose que vous utilisez un ListFragment ou ListActivity. Si ce n'est pas le cas, la façon de configurer l'adaptateur serait légèrement différente.

Espérons que cela aide!

+0

merci pour la réponse! – Tony

0

Oui, vous pouvez maintenant tirer des requêtes en utilisant la méthode raqQuery(), vous obtiendrez le curseur dans le résultat.

Maintenant, vous devez parcourir le curseur et récupérer les données.

Par exemple,

Cursor cur = db.raqQuery("Select * from myTable",null); 
if (cur != null) { 
    if (cur.moveToFirst()) { 
     do { 
      cur.getString(cur.getColumnIndex("Name"))); // "Name" is the field name in table 
     } while (cur.moveToNext()); 
    } 
} 
+0

merci pour la réponse! – Tony