2017-04-09 1 views
0

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



} 

Répondre

0
android:layout_height="wrap_content" 

Vous devez parent correspondance

Et si vous utilisez une base de données, essayez d'utiliser CursorAdapter au lieu de ArrayAdapter et veiller à ce que dataSource.getAllGruppen() retourne en fait quelque chose

, vous avez également deux instances de HundeschuleMemoDataSource dataSource. Retirez la déclaration du champ puisque le contexte n'a pas encore été initialisé

private HundeschuleMemoDataSource dataSource; 

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

    dataSource = new HundeschuleMemoDataSource(this); 

    initializeHundeschuleKundenListView(); 

Et si vous avez utilisé un CursorAdapter, voici votre méthode corrigée

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

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()'? –