简体   繁体   中英

I can't see the ListView

What is the reason for the empty ListView? Actually, I have filled the database with dates, but the ListView is empty, especially the activity is empty. The activity is empty when the ListView is create with the arrayAdapter, but the app chrashes when it is create with the the cursor Adapter.

I wrote an app which uses a ListView to list a part of my SQLite dates.
But I can't see the ListView. The app starts without an error, but the Activity is empty. I can't see my error. I hope, someone else can see the error.

<?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"

You need match parent

And if you're using a database, try to use CursorAdapter instead of ArrayAdapter and ensure that dataSource.getAllGruppen() actually returns something

Also, you have two instances of HundeschuleMemoDataSource dataSource . Remove the declaration from the field since the Context is not yet initialized

private HundeschuleMemoDataSource dataSource;

@Override 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gruppeauslesen);

    dataSource = new  HundeschuleMemoDataSource(this);

    initializeHundeschuleKundenListView();

And if you did use a CursorAdapter, here's your corrected method

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM