Quelle est la raison pour le ListView vide? En fait, j'ai rempli la base de données avec des dates, mais le ListView est vide, surtout l'activité est vide. L'activité est vide lorsque ListView est créé avec arrayAdapter, mais l'application émet une erreur lorsqu'elle est créée avec le curseur Adapter.Je ne peux pas voir le ListView
J'ai écrit une application qui utilise un ListView pour lister une partie de mes dates SQLite.
Mais je ne peux pas voir le ListView. L'application démarre sans erreur, mais l'activité est vide. Je ne peux pas voir mon erreur. J'espère que quelqu'un d'autre peut voir l'erreur.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
tools:context="com.example.katjarummler.hundeschule_petra_bennemann.
GruppeAuslesenActivity"
android:focusableInTouchMode="true"
android:weightSum="1">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:visibility="visible"
/>
</LinearLayout>
public class GruppeAuslesenActivity extends AppCompatActivity {
public static final String LOG_TAG =
GruppeAuslesenActivity.class.getSimpleName();
ListView mKundenListView;
private HundeschuleMemoDataSource dataSource = new
HundeschuleMemoDataSource(this);
private GoogleApiClient client;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gruppeauslesen);
initializeHundeschuleKundenListView();
HundeschuleMemoDataSource dataSource = new
HundeschuleMemoDataSource(this);
client = new
GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
}
private void initializeHundeschuleKundenListView() {
List<HundeschuleMemoKunden> listForInitialization = new
ArrayList<HundeschuleMemoKunden>();
mKundenListView = (ListView) findViewById(R.id.list);
// Erstellen des ArrayAdapters für unseren ListView
ArrayAdapter<HundeschuleMemoKunden>
hundeschuleMemoKundenArrayAdapter = new
ArrayAdapter<HundeschuleMemoKunden>(
this,
android.R.layout.simple_list_item_multiple_choice,
listForInitialization) {
// Wird immer dann aufgerufen, wenn der übergeordnete ListView
die Zeile neu zeichnen muss
@NonNull
public View getView(int position, View convertView, @NonNull
ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView textView = (TextView) view;
HundeschuleMemoKunden memo = (HundeschuleMemoKunden)
mKundenListView.getItemAtPosition(position);
// Hier prüfen, ob Eintrag abgehakt ist. Falls ja, Text
durchstreichen
if (memo.isChecked()) {
textView.setPaintFlags(textView.getPaintFlags() |
Paint.STRIKE_THRU_TEXT_FLAG);
textView.setTextColor(Color.rgb(175, 175, 175));
} else {
textView.setPaintFlags(textView.getPaintFlags() &
(~Paint.STRIKE_THRU_TEXT_FLAG));
textView.setTextColor(Color.DKGRAY);
}
return view;
}
};
mKundenListView.setAdapter(hundeschuleMemoKundenArrayAdapter);
mKundenListView.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> adapterView, View view,
int position, long id) {
HundeschuleMemoKunden memo = (HundeschuleMemoKunden)
mKundenListView.getItemAtPosition(position);
// Hier den checked-Wert des Memo-Objekts umkehren, bspw.
von true auf false
// Dann ListView neu zeichnen mit showAllListEntries()
HundeschuleMemoKunden updatedHundeschuleMemoKunden =
dataSource.updateHundeschuleMemoKunden(memo.getId(), memo.getgName(),
memo.getkName(),
memo.getkTelefon(), memo.gethName(),
memo.getbeginn(), (!memo.isChecked()));
Log.d(LOG_TAG, "Checked-Status von Eintrag: " +
updatedHundeschuleMemoKunden.toString() + " ist: " +
updatedHundeschuleMemoKunden.isChecked());
showAllListEntries();
}
});
}
private void showAllListEntries() {
List<HundeschuleMemoKunden> hundeschuleMemoGruppenList =
dataSource.getAllGruppen();
ArrayAdapter<HundeschuleMemoKunden> adapter =
(ArrayAdapter<HundeschuleMemoKunden>) mKundenListView.getAdapter();
adapter.clear();
adapter.addAll(hundeschuleMemoGruppenList);
adapter.notifyDataSetChanged();
}
protected void onResume() {
super.onResume();
Log.d(LOG_TAG, "Die Datenquelle wird geöffnet.");
dataSource.open();
Log.d(LOG_TAG, "Folgende Einträge sind in der Datenbank
enthalten:");
showAllListEntries();
}
protected void onPause() {
super.onPause();
Log.d(LOG_TAG, "Die Datenquelle wird geschlossen.");
dataSource.close();
}
public Action getIndexApiAction() {
Thing object = new Thing.Builder()
.setName("GruppeAuslesen Page") // TODO: Define a title for
the content shown.
// TODO: Make sure this auto-generated URL is correct.
.setUrl(Uri.parse("http://[ENTER-YOUR-URL-HERE]"))
.build();
return new Action.Builder(Action.TYPE_VIEW)
.setObject(object)
.setActionStatus(Action.STATUS_TYPE_COMPLETED)
.build();
}
@Override
public void onStart() {
super.onStart();
client.connect();
AppIndex.AppIndexApi.start(client, getIndexApiAction());
}
@Override
public void onStop() {
super.onStop();
AppIndex.AppIndexApi.end(client, getIndexApiAction());
client.disconnect();
}
}
public class HundeschuleMemoDataSource {
private static final String LOG_TAG =
HundeschuleMemoDataSource.class.getSimpleName();
private SQLiteDatabase database;
private HundeschuleMemoDBHelper dbHelper;
private String[] columns = {
HundeschuleMemoDBHelper.COLUMN_ID,
HundeschuleMemoDBHelper.COLUMN_KName,
HundeschuleMemoDBHelper.COLUMN_GNAME,
HundeschuleMemoDBHelper.COLUMN_KTELEFON,
HundeschuleMemoDBHelper.COLUMN_HUND,
HundeschuleMemoDBHelper.COLUMN_BEGINN,
HundeschuleMemoDBHelper.COLUMN_CHECKED,
};
public HundeschuleMemoDataSource(Context context) {
Log.d(LOG_TAG, "Unsere DataSource erzeugt jetzt den dbHelper. ");
dbHelper = new HundeschuleMemoDBHelper(context, "gruppe",
TABLE_KUNDEN_LIST);
}
public void open() {
Log.d(LOG_TAG, "Eine Referenz auf die Datenbank wird jetzt
angefragt.");
database = dbHelper.getWritableDatabase();
Log.d(LOG_TAG, "Datenbankreferenz erhalten. Pfad zur Datenbank: " +
database.getPath());
}
public void close() {
dbHelper.close();
Log.d(LOG_TAG, "Datenbank mit Hilfe des DBHelpers geschlossen.");
}
public HundeschuleMemoKunden createHundeschuleMemoKunden(String kName,
String gName, String kTelefon, String hName,
String beginn)
{
ContentValues values = new ContentValues();
values.put(COLUMN_KName, kName);
values.put(COLUMN_GNAME, gName);
values.put(HundeschuleMemoDBHelper.COLUMN_KTELEFON, kTelefon);
values.put(COLUMN_HUND, hName);
values.put(HundeschuleMemoDBHelper.COLUMN_BEGINN, beginn);
long insertId = database.insert(TABLE_KUNDEN_LIST, null, values);
Cursor cursor = database.query(TABLE_KUNDEN_LIST,
columns, HundeschuleMemoDBHelper.COLUMN_ID + "=" +
insertId,
null, null, null, null);
cursor.moveToFirst();
HundeschuleMemoKunden hundeschuleMemoKunden =
cursorToHundeschuleMemoKunden(cursor);
cursor.close();
return hundeschuleMemoKunden;
}
public HundeschuleMemoKunden createHundeschuleMemoGruppen(String gName,
String kName, String hName) {
ContentValues values = new ContentValues();
values.put(COLUMN_GNAME, gName);
values.put(COLUMN_KName, kName);
values.put(COLUMN_HUND, hName);
long insertId = database.insert(TABLE_KUNDEN_LIST, null, values);
Cursor cursor = database.query(TABLE_KUNDEN_LIST,
columns, HundeschuleMemoDBHelper.COLUMN_ID + "=" +
insertId,
null, null, null, null);
cursor.moveToFirst();
HundeschuleMemoKunden hundeschuleMemoGruppen =
cursorToHundeschuleMemoKunden(cursor);
cursor.close();
return hundeschuleMemoGruppen;
}
public void deleteHundeschuleMemoKunden(HundeschuleMemoKunden
hundeschuleMemoKunden) {
long id = hundeschuleMemoKunden.getId();
database.delete(TABLE_KUNDEN_LIST,
HundeschuleMemoDBHelper.COLUMN_ID + "=" + id,
null);
Log.d(LOG_TAG, "Eintrag gelöscht! ID: " + id + " Inhalt: " +
hundeschuleMemoKunden.toString());
}
public HundeschuleMemoKunden updateHundeschuleMemoKunden(long id,
String newkName, String newgName, String newkTelefon, String newHund,
String
newBeginn, boolean newChecked) {
int intValueChecked = (newChecked) ? 1 : 0;
ContentValues values = new ContentValues();
values.put(COLUMN_KName, newkName);
values.put(COLUMN_GNAME, newgName);
values.put(HundeschuleMemoDBHelper.COLUMN_KTELEFON, newkTelefon);
values.put(COLUMN_HUND, newHund);
values.put(HundeschuleMemoDBHelper.COLUMN_BEGINN, newBeginn);
values.put(HundeschuleMemoDBHelper.COLUMN_CHECKED,
intValueChecked);
database.update(TABLE_KUNDEN_LIST,
values,
HundeschuleMemoDBHelper.COLUMN_ID + "=" + id,
null);
Cursor cursor = database.query(TABLE_KUNDEN_LIST,
columns, HundeschuleMemoDBHelper.COLUMN_ID + "=" + id,
null, null, null, null);
cursor.moveToFirst();
HundeschuleMemoKunden hundeschuleMemoKunden =
cursorToHundeschuleMemoKunden(cursor);
cursor.close();
return hundeschuleMemoKunden;
}
private HundeschuleMemoKunden cursorToHundeschuleMemoKunden(Cursor
cursor) {
int idIndex =
cursor.getColumnIndex(HundeschuleMemoDBHelper.COLUMN_ID);
int idKName = cursor.getColumnIndex(COLUMN_KName);
int idGName = cursor.getColumnIndex(COLUMN_GNAME);
int idKTelefon =
cursor.getColumnIndex(HundeschuleMemoDBHelper.COLUMN_KTELEFON);
int idHund = cursor.getColumnIndex(COLUMN_HUND);
int idBeginn =
cursor.getColumnIndex(HundeschuleMemoDBHelper.COLUMN_BEGINN);
int idChecked =
cursor.getColumnIndex(HundeschuleMemoDBHelper.COLUMN_CHECKED);
String kName = cursor.getString(idKName);
String gName = cursor.getString(idGName);
String kTelefon = cursor.getString(idKTelefon);
String Hund = cursor.getString(idHund);
String beginn = cursor.getString(idBeginn);
long id = cursor.getLong(idIndex);
int intValueChecked = cursor.getInt(idChecked);
boolean isChecked = (intValueChecked != 0);
HundeschuleMemoKunden hundeschuleMemoKunden = new
HundeschuleMemoKunden(kName, gName, kTelefon, Hund,
beginn);
return hundeschuleMemoKunden;
}
public List<HundeschuleMemoKunden> getAllHundeschuleMemos() {
List<HundeschuleMemoKunden> hundeschuleMemoKundenList = new
ArrayList<>();
Cursor cursor = database.query(TABLE_KUNDEN_LIST,
columns, null, null, null, null, null);
cursor.moveToFirst();
HundeschuleMemoKunden hundeschuleMemoKunden;
while (!cursor.isAfterLast()) {
hundeschuleMemoKunden = cursorToHundeschuleMemoKunden(cursor);
hundeschuleMemoKundenList.add(hundeschuleMemoKunden);
Log.d(LOG_TAG, "ID: " + hundeschuleMemoKunden.getId() + ",
Inhalt: " + hundeschuleMemoKunden.toString());
cursor.moveToNext();
}
cursor.close();
return hundeschuleMemoKundenList;
}
public List<HundeschuleMemoKunden> getAllGruppen() {
List<HundeschuleMemoKunden> gruppenList = new ArrayList<>();
SQLiteDatabase database = dbHelper.getWritableDatabase();
String selectQuery = "SELECT " +
HundeschuleMemoDBHelper.COLUMN_ID + " , " +
HundeschuleMemoDBHelper.COLUMN_GNAME + " , " +
HundeschuleMemoDBHelper.COLUMN_KName + " , " +
HundeschuleMemoDBHelper.COLUMN_HUND + " , " +
HundeschuleMemoDBHelper.COLUMN_CHECKED +
" FROM " + HundeschuleMemoDBHelper.TABLE_KUNDEN_LIST + "
ORDER BY 2 ASC ";
Cursor cursor = database.rawQuery(selectQuery, null);
cursor.moveToFirst();
cursor.close();
database.close();
return gruppenList;
}
}
public class HundeschuleMemoDBHelper extends SQLiteOpenHelper {
private static final String LOG_TAG =
HundeschuleMemoDBHelper.class.getSimpleName();
public static final String DB_NAME = "Kunden_list.db";
public static final int DB_VERSION = 7;
public static final String TABLE_KUNDEN_LIST = "Kunden_list";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_KName = "Name";
public static final String COLUMN_GNAME = "Gruppe";
public static final String COLUMN_KTELEFON = "Telefon";
public static final String COLUMN_HUND = "Hund";
public static final String COLUMN_BEGINN = "Beginn";
public static final String COLUMN_CHECKED = "checked";
public static final String SQL_CREATE = "CREATE TABLE " +
TABLE_KUNDEN_LIST +
"(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_KName + " TEXT NOT NULL, " +
COLUMN_GNAME + " TEXT NOT NULL, " +
COLUMN_KTELEFON + " TEXT NOT NULL, " +
COLUMN_HUND + " TEXT NOT NULL, " +
COLUMN_BEGINN + " TEXT NOT NULL, " +
COLUMN_CHECKED + " BOOLEAN NOT NULL DEFAULT 0);";
public static final String SQL_DROP = "DROP TABLE IF EXISTS " +
TABLE_KUNDEN_LIST;
public HundeschuleMemoDBHelper(Context context, String gruppe, String
sql) {
super(context, DB_NAME, null, DB_VERSION);
Log.d(LOG_TAG, "DBHelper hat die Datenbank: " + getDatabaseName() +
" erzeugt.");
}
//Die onCreate-Methode wird nur aufgerufen, falls die Datenbank noch
nicht existiert
public void onCreate(SQLiteDatabase db) {
try{
Log.d(LOG_TAG, "Die Tabelle wird mit SQL-Befehl: " + SQL_CREATE
+ " angelegt.");
db.execSQL(SQL_CREATE);
}
catch(Exception ex){
Log.e(LOG_TAG, "Fehler beim Anlegen der Tabelle: " +
ex.getMessage());
}
}
// Die onUpgrade-Methode wird aufgerufen, sobald die neue
Versionsnummer höher
// als die alte Versionsnummer ist und somit ein Upgrade notwendig wird
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
Log.d(LOG_TAG, "Die Tabelle mit Versionsnummer " + oldVersion + "
wird entfernt.");
db.execSQL(SQL_DROP);
onCreate(db);
}
}
public class HundeschuleMemoKunden {
private String kName;
private String gName;
private String kTelefon;
private String hName;
private String beginn;
private long id;
private boolean checked;
public HundeschuleMemoKunden(String kName, String gName, String
kTelefon, String hName,
String beginn){
this.id=id;
this.kName=kName;
this.gName=gName;
this.kTelefon=kTelefon;
this.hName=hName;
this.beginn=beginn;
this.checked = checked;
}
public String getkName(){
return kName;
}
public void setkName(String kName){
this.kName = kName;
}
public String getgName(){return gName;}
public void setgName(String gName){
this.gName = gName;
}
public String getkTelefon(){
return kTelefon;
}
public void setkTelefon(String kTelefon){this.kTelefon = kTelefon;}
public String gethName(){
return hName;
}
public void sethName(String hName){
this.hName = hName;
}
public String getbeginn(){
return beginn;
}
public void setbeginn(String beginn){
this.beginn = beginn;
}
public long getId(){return id;}
public void setId(long id){
this.id = id;
}
public boolean isChecked(){return checked;}
public void setChecked(boolean checked){this.checked = checked;}
public String toString(){
String output = kName + " " + gName + " " + kTelefon + " " + hName
+ " " + beginn;
return output;
}
}
Pouvez-vous mettre à jour votre question avec une capture d'écran de ce que vous faites voir? Et une instruction Log qui imprime la taille de 'dataSource.getAllGruppen()'? –