/ / Impossible d'obtenir des éléments de ListAdapter - android, sqlite, listview, android-cursor

Impossible d'obtenir des éléments de ListAdapter - Android, SQLite, Listview, Android-Curseur

Je lis les données de la base de données:

private MyDatabase db;
private Cursor cities;
private ListAdapter cityListAdapter;
private ListView    citiesListView;

db = new MyDatabase(getContext());
cities = db.getCities();

Et définissez un adaptateur pour cela:

cityListAdapter = new SimpleCursorAdapter(getContext(),
android.R.layout.simple_list_item_1,
cities,
new String[] {"city"},
new int[] {android.R.id.text1},0);

citiesListView.setAdapter(cityListAdapter);

Je peux voir le ListView correctement rempli. Mais lorsque j'essaie d'obtenir la chaîne d'un élément, j'obtiens une chaîne étrange à la place: android.database.sqlite.SQLiteCursor@4251fac0

Voici mon code pour cela:

citiesListView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
String str = cityListAdapter.getItem(position).toString();

chosenCityTextView.setText(str);
}
});

Pourquoi ne reçois-je pas la chaîne qui apparaît dans le ListView?

Réponses:

1 pour la réponse № 1

Parce que la méthode getItem renvoie un curseur, puis vous devez utiliser getColumnIndex et getString pour obtenir la valeur effective du champ souhaité. Regarde aussi Retourne un objet depuis CursorAdapter.get ()

Exemple de code:

Cursor cursor = (Cursor) cityListAdapter.getItem(position);
String city = cursor.getString(cursor.getColumnIndex("city"));
chosenCityTextView.setText(city);

La façon dont vous le faisiez auparavant était d'appeler la méthode .toString () sur l'objet curseur, c'est pourquoi vous avez obtenu cette chaîne étrange (qui est l'adresse de l'objet en java).