我看不到列表视图



空列表视图的原因是什么?实际上,我已经用日期填充了数据库,但是ListView是空的,尤其是活动是空的。使用 arrayAdapter 创建 ListView 时,该活动为空,但使用光标适配器创建应用程序时,应用程序会崩溃。

我写了一个应用程序,它使用ListView列出我的SQLite日期的一部分。
但我看不到列表视图。应用启动时没有错误,但活动为空。我看不到我的错误。我希望其他人可以看到错误。

<?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;
  }

 }
 android:layout_height="wrap_content"

您需要匹配父级

如果您使用的是数据库,请尝试使用 CursorAdapter 而不是 ArrayAdapter,并确保dataSource.getAllGruppen()实际返回一些内容。

此外,您还有两个 HundeschuleMemoDataSource dataSource 实例。从字段中删除声明,因为上下文尚未初始化

private HundeschuleMemoDataSource dataSource;
@Override 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gruppeauslesen);
    dataSource = new  HundeschuleMemoDataSource(this);
    initializeHundeschuleKundenListView();

如果您确实使用了CursorAdapter,这是您更正的方法

public Cursor getAllGruppen() {
   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 ";
    return dbHelper.getReadableDatabase().rawQuery(selectQuery, null);
}

最新更新