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.
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
Je devine qu'il trie le nombre par la valeur ASCII – schwiz
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