L'affichage des données de la base de données SQLite dans ListView dans Android
Bien que cette question a été posée de nombreuses fois ici, je ne peux pas trouver la réponse adéquate pour s'adapter à mon code. J'ai conscience que cela peut être quelque chose de petit, mais je n'arrive pas à trouver le problème comme je ne suis vraiment nouveau dans ce.
Voici mon code getClientNames dans DatabaseHelper classe:
public Cursor getSitesByClientname(String id) {
String[] args={id};
Cursor myCursor = db.rawQuery("SELECT client_sitename FROM " + CLIENT_SITES_TABLE + " WHERE client_id=?", args);
String results = "";
/*int count = myCursor.getCount();
String[] results = new String[count + 1];
int i = 0;*/
if (myCursor != null) {
if(myCursor.getCount() > 0)
{
for (myCursor.moveToFirst(); !myCursor.isAfterLast(); myCursor.moveToNext())
{
results = results + myCursor.getString(myCursor.getColumnIndex("client_sitename"));
}
}
}
return results;
}
Un problème, c'est que je suis de retour d'un 'String' pour le 'Curseur', mais je ne suis pas sûr de ce qui est le meilleur moyen de contourner cela, comme je pense que je devrais être de retour d'un Curseur.
Voici la ClientSites classe où je veux afficher les données:
public class ClientSites extends Activity {
//public final static String ID_EXTRA="com.example.loginfromlocal._ID";
private DBUserAdapter dbHelper = null;
private Cursor ourCursor = null;
private Adapter adapter=null;
@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
public void onCreate(Bundle savedInstanceState) {
try
{
super.onCreate(savedInstanceState);
setContentView(R.layout.client_sites);
Intent i = getIntent();
String uID = String.valueOf(i.getIntExtra("userID", 0));
ListView myListView = (ListView)findViewById(R.id.myListView);
dbHelper = new DBUserAdapter(this);
//dbHelper.createDatabase();
dbHelper.openDataBase();
ourCursor = dbHelper.getSitesByClientname(uID);
Log.e("ALERT", uID.toString());
startManagingCursor(ourCursor);
Log.e("ERROR", "After start manage cursor: ");
//@SuppressWarnings("deprecation")
//SimpleCursorAdapter adapter = new SimpleCursorAdapter(getBaseContext(), R.id.myListView, null, null, null);
CursorAdapter adapter = new SimpleCursorAdapter(this, R.id.myListView, null, null, null, 0);
adapter = new Adapter(ourCursor);
//Toast.makeText(ClientSites.this, "Booo!!!", Toast.LENGTH_LONG).show();
myListView.setAdapter(adapter);
myListView.setOnItemClickListener(onListClick);
}
catch (Exception e)
{
Log.e("ERROR", "XXERROR IN CODE: " + e.toString());
e.printStackTrace();
}
}
private AdapterView.OnItemClickListener onListClick=new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent,
View view, int position,
long id)
{
Intent i=new Intent(ClientSites.this, InspectionPoints.class);
i.putExtra(ID_EXTRA, String.valueOf(id));
startActivity(i);
}
};
class Adapter extends CursorAdapter {
@SuppressWarnings("deprecation")
Adapter(Cursor c) {
super(ClientSites.this, c);
}
//@Override
public void bindView(View row, Context ctxt,
Cursor c) {
Holder holder=(Holder)row.getTag();
holder.populateFrom(c, dbHelper);
}
@Override
public View newView(Context ctxt, Cursor c,
ViewGroup parent) {
LayoutInflater inflater=getLayoutInflater();
View row = inflater.inflate(R.layout.row, parent, false);
Holder holder=new Holder(row);
row.setTag(holder);
return(row);
}
}
static class Holder {
private TextView name=null;
Holder(View row) {
name=(TextView)row.findViewById(R.id.ingredientText);
}
void populateFrom(Cursor c, DBUserAdapter r) {
name.setText(r.getName(c));
}
}
}
Voici le code que j'utilise désormais pour essayer et d'afficher les données dans la liste. J'ai modifié un peu de ma tentative d'origine, mais toujours pas sûr de ce que je fais mal.
public void onCreate(Bundle savedInstanceState) {
try
{
super.onCreate(savedInstanceState);
//setContentView(R.layout.client_sites);
Intent i = getIntent();
String uID = String.valueOf(i.getIntExtra("userID", 0));
//int uID = i.getIntExtra("userID", 0);
//ListView myListView = (ListView)findViewById(R.id.myListView);
dbHelper = new DBUserAdapter(this);
dbHelper.createDatabase();
dbHelper.openDataBase();
String[] results = dbHelper.getSitesByClientname(uID);
//setListAdapter(new ArrayAdapter<String>(ClientSites.this, R.id.myListView, results));
//adapter = new ArrayAdapter<String>(ClientSites.this, R.id.myListView, results);
setListAdapter(new ArrayAdapter<String>(ClientSites.this, R.layout.client_sites, results));
//ListView myListView = (ListView)findViewById(R.id.myListView);
ListView listView = getListView();
listView.setTextFilterEnabled(true);
//ourCursor = dbHelper.getSitesByClientname(uID);
//Log.e("ALERT", uID.toString());
//startManagingCursor(ourCursor);
//Log.e("ERROR", "After start manage cursor: ");
//@SuppressWarnings("deprecation")
//SimpleCursorAdapter adapter = new SimpleCursorAdapter(getBaseContext(), R.id.myListView, null, null, null); //LOOK AT THIS IN THE MORNING!!!!!!!!!!!
//CursorAdapter adapter = new SimpleCursorAdapter(this, R.id.myListView, null, null, null, 0);
//adapter = new Adapter(ourCursor);
//Toast.makeText(ClientSites.this, "Booo!!!", Toast.LENGTH_LONG).show();
//myListView.setAdapter(adapter);
//myListView.setOnItemClickListener(onListClick);
Ouais je vais donner un aller, juste assez nouveau sur ce donc pas tout à fait sûr de la syntaxe correcte. Merci pour votre aide.
OriginalL'auteur Confucius | 2013-03-12
Vous devez vous connecter pour publier un commentaire.
J'ai Créé une liste à partir d'une base de données. Voici le code que j'ai utilisé pour mon application
Voici une partie de la base de données du gestionnaire. Il sera de retour une Liste de Catégories pour ma listview. Elle peut retourner une liste de Chaînes de caractères, si c'est ce dont vous avez besoin.
Ici est de savoir comment je remplis le ListView par l'appel de la base de données.
EDIT: Voici quelque chose qui devrait fonctionner pour vous
L'utiliser comme ceci
J'ai modifié mon code pour l'affichage des données un peu en ligne avec ce que vous avez ici. J'ai voulu le montrer ici, mais ne semblent pas être en mesure, ont donc modifié ma question d'origine et de l'ajouter à la partie inférieure. Si quelqu'un pouvait jeter un oeil et donner des conseils sur ce que je fais de mal, je l'apprécierais vraiment.
Pourriez-vous montrer le nouveau code que vous avez pour vous DBUserAdapter classe que vous faites.
Voir mon edit. J'ai ajouté un peu de code en bas de l'écran devrait fonctionner. J'espère qu'il n'.
OriginalL'auteur Zabador
Si vous voulez revenir le Curseur de dbHelper vous pouvez faire quelque chose comme ça...
Je voudrais aussi prendre le temps de lire le listview tutoriel
Pas de problème. Hésitez pas à marquer ce que la réponse si vous êtes heureux.
OriginalL'auteur MrChaz