2010-10-31 3 views
0

J'ai écrit une petite application Android qui saisit certaines données et l'affiche dans un ListView.Requête Android SQL ne pas commander des données

Je souhaite que la liste soit triée par ordre croissant (sans problème). Mais lorsque j'ajoute un nouvel élément, il reste en bas de la liste même lorsque la vue/application est rechargée. Il semble que les seules données qui sont triées sont les entrées qui ont été créées dans la méthode OnCreate() de la base de données.

Je ne suis pas sûr du code à fournir mais je vais commencer par vous montrer des extraits de la classe DBAdapter, puis de la classe principale de l'application.

construction Base de données requête:

private static final String DATABASE_CREATE = 
    "create table "+ DATABASE_TABLE 
    + "(" 
    + FIELD_ROWID+" integer primary key autoincrement, " 
    + FIELD_NAME +" varchar(30) not null, " + FIELD_TELEPHONE + " varchar(20) not null, " 
    + FIELD_ADDRESS + " text not null," 
    + FIELD_URL + " varchar(255) not null);"; 

fonction pour obtenir la liste des données:

public Cursor getRestaurants() 
{ 
Cursor result = null; 
try{ 
    result = db.query(DATABASE_TABLE, new String[] {FIELD_ROWID, FIELD_NAME}, null, null, null, null, FIELD_NAME+" ASC"); 
} 
catch (Exception e) 
{ 
    Log.v("applog", e.getMessage()); 
} 
return result; 
} 

Voici un extrait de la principale méthode. Ici vous pouvez voir que j'appelle la fonction getRestaurants() montrée ci-dessus. Je suis perplexe quant à la raison pour laquelle les données ne sont pas triées.

Tout conseil grandement apprécié. Merci d'avance.

public class Assignment2 extends ListActivity { 

// Set up some global variables. 
private static final int ADD_NEW_ID = Menu.FIRST; 
private static final int CLOSE_APP_ID = ADD_NEW_ID+1; 
private final DBAdapter db = new DBAdapter(this); 
private static CursorAdapter curAdapter = null; 
private static Cursor rawData = null; 
@Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     db.open(); // Open connection to restaurant db. 

    rawData = db.getRestaurants(); 
    Log.v("applog", rawData.getCount()+" Restaurants loaded from DB."); 

    if(rawData.getCount() == 0) 
    { 
     Toast.makeText(getApplicationContext(), "No restaurants found.", Toast.LENGTH_SHORT).show(); 
    } 
    try 
    { 
     /* The following two arrays are used to map DB fields to ListView items 
     * From a custom layout file. 
     */ 
     // Array of db fields to be used when converting cursor to ListView 
      String[] strFields = { "name", BaseColumns._ID }; 
      // Array of listview id's to be used when populating the ListView 
      int[] intFields = { R.id.first }; 

      curAdapter = new SimpleCursorAdapter(this, R.layout.row, rawData, strFields, intFields); 
    } 
    catch (Exception e) 
    { 
     Log.v("applog", e.getMessage()); 
    } 

    // Apply the converter cursor to the current ListView 
    setListAdapter(curAdapter); 
     db.close(); // Close connection to restaurant db. 

Répondre

0

Im ne sais pas exactement ce que votre problème est mais, tout semble bien moins ces lignes de code que j'ai quand je reçois un rappel de mes nouvelles données insérer

 if(cursor!=null)cursor.requery(); 
     adapter.notifyDataSetChanged(); 

Espérons que cela va résoudre votre problème.

+0

Merci, mais ce code ne le résout pas. Le programme fonctionne correctement lorsque le nom du restaurant commence par une majuscule. Ensuite, cela fait partie des données triées. Mais, si le nom commence par des minuscules alors il ne fait pas partie du tri et reste juste au bas de la liste .. ** confus ** – conor

+0

Je devine qu'il trie le nombre par la valeur ASCII – schwiz

+0

où est votre code pour ajouter/supprimer un élément? Est-ce que vous le commettez à la base de données, ou juste le retirer de l'adaptateur> – Jim

Questions connexes