2017-04-09 14 views
0

空のListViewの理由は何ですか?実際には、データベースに日付を入力しましたが、ListViewは空です。特にアクティビティは空です。 ArrayAdapterを使用してListViewを作成すると、アクティビティは空になりますが、カーソルアダプタを使用して作成したときにアプリがクラッシュします。ListViewが表示されない

私はSQLiteの日付の一部を一覧表示するためにListViewを使用するアプリケーションを作成しました。
しかし、私はListViewを見ることができません。アプリはエラーなしで起動しますが、アクティビティは空です。私は私のエラーを見ることができません。私は、誰かがエラーを見ることができます願っています。

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



} 

答えて

0
android:layout_height="wrap_content" 

あなたはマッチ親

を必要として、データベースを使用している場合は、代わりにArrayAdapterのCursorAdapterを使用してdataSource.getAllGruppen()が実際にも何か

を返し、あなたはHundeschuleMemoDataSource dataSourceの2つのインスタンスを持っていることを確認してみてください。コンテキストがまだ

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

です見る?そして、 'dataSource.getAllGruppen()'のサイズを出力するLogステートメント? –

関連する問題