2015-10-16 70 views
0

我创建了一个SQL数据库,并且能够从三个EditText Views安全地获取数据并将其显示在单个TextView中。 然后我认为这会更好地显示自定义ListView中的数据,所以我遵循开发人员指南并试图通过simpleCursorAdapter显示数据。但它没有工作......我没有得到任何错误或任何东西,数据只是没有显示......我想在光标,适配器或数据库之间必须有一些缺失的连接......我知道,这种问题是问相当频繁,但我无法找到我的错误,任何帮助将不胜感激:通过SimpleCursorAdapter在自定义ListView中显示来自SQL的数据

MyDBHandlerFaecher.java:

public class MyDBHandlerFaecher extends SQLiteOpenHelper{ 
    private static final int DATABASE_VERSION = 5; 
    private static final String DATABASE_NAME = "faecher.db"; 
    public static final String TABLE_FAECHER = "Faechertable"; 
    public static final String COLUMN_ID = "_id"; 
    public static final String COLUMN_NAME = "_faechername"; 
    public static final String COLUMN_RAUM = "_faecherraum"; 
    public static final String COLUMN_COLOR = "_faecherfarbe"; 

public MyDBHandlerFaecher(FaecherActivity context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
    super(context, DATABASE_NAME, factory, DATABASE_VERSION); 
} 

//Create the table 
@Override 
public void onCreate(SQLiteDatabase db) { 
    String query = "CREATE TABLE " + TABLE_FAECHER + "(" + 
      COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      COLUMN_NAME + " TEXT, " + 
      COLUMN_RAUM + " TEXT, " + 
      COLUMN_COLOR + " TEXT " + 
      ");"; 
    db.execSQL(query); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_FAECHER); 
    onCreate(db); 
} 

//Add a new row to the DB 
public void addFach(Faecher fach){ 
    ContentValues values = new ContentValues(); 

    values.put(COLUMN_NAME, fach.get_faechername()); 
    values.put(COLUMN_RAUM, fach.get_faecherraum()); 
    values.put(COLUMN_COLOR, fach.get_faecherfarbe()); 

    SQLiteDatabase db = getWritableDatabase(); 
    db.insert(TABLE_FAECHER, null, values); 
    db.close(); 
} 
//Delete row from DB 
public void deleteFach(String name){ 
    SQLiteDatabase db = getWritableDatabase(); 
    //Delete the line in which the COLUMN_NAME is equal to the input 
    db.execSQL("DELETE FROM " + TABLE_FAECHER + " WHERE " + COLUMN_NAME + "=" + "\"" + name + "\"" + ";"); 
} 

FaecherActivity.java

public class FaecherActivity extends AppCompatActivity{ 

EditText et_facheintrag; 
EditText et_raumeintrag; 
EditText et_farbeintrag; 
ListView lv_faecher; 
MyDBHandlerFaecher dbHandlerFaecher; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_faecher); 

    et_facheintrag = (EditText) findViewById(R.id.et_facheintrag); 
    et_raumeintrag = (EditText) findViewById(R.id.et_raumeintrag); 
    et_farbeintrag = (EditText) findViewById(R.id.et_farbeintrag); 
    lv_faecher = (ListView) findViewById(R.id.lv_faecher); 
    dbHandlerFaecher = new MyDBHandlerFaecher(this, null, null, 1); 

    printDatabase(); 
} 

//Add fach to database 
public void addButtonClicked(View view){ 
    Faecher fach = new Faecher(et_facheintrag.getText().toString(), et_raumeintrag.getText().toString(), et_farbeintrag.getText().toString()); 
    dbHandlerFaecher.addFach(fach); 
    printDatabase(); 
} 

//delete fach from database 
public void deleteButtonClicked(View view){ 
    String inputText = et_facheintrag.getText().toString(); 
    dbHandlerFaecher.deleteFach(inputText); 
    printDatabase(); 
} 

public void printDatabase(){ 
    String[] fromColumns = new String[]{"_faechername", "_faecherraum", "_faecherfarbe"}; 
    int[] toViews = new int[]{R.id.facheintrag, R.id.raumeintrag, R.id.farbeintrag}; 

    Cursor cursor; 
    cursor = getContentResolver().query(Uri.parse(MyDBHandlerFaecher.TABLE_FAECHER),null, null, null, null); 

    SimpleCursorAdapter fachadapter = new SimpleCursorAdapter(this, R.layout.faecher_row, cursor, fromColumns,toViews, 0); 
    lv_faecher.setAdapter(fachadapter); 
} 

}

+0

你确保你的光标不包含的记录? –

+0

did: 'SQLiteDatabase db = getWritableDatabase();游标cursor = db.rawQuery(“SELECT * FROM”+ TABLE_FAX +“WHERE 1”,null); //检查是否光标是空的或不是 如果(光标= NULL && cursor.getCount()> 0!){ Log.d( “事件”, “记录确实存在”); } else { Log.d(“事件”,“记录不存在”); } cursor.moveToFirst(); (!cursor.isAfterLast()){ cursor.moveToNext(); } db.close();' Log将返回“记录确实存在”... –

+0

您可以发布您的XML(包含列表以及列表行的XML的布局)。 也尝试从while循环中的日志中的光标打印一个值。 –

回答

0

我发现对我的作品的代码:我发现光标在我DBHandler类是不是空的,但是这是我FaecherActivity空...所以我创建了一个自定义的SimpleCursorAdapter和修改我的代码是这样的:

FaecherActivity:

public class FaecherActivity extends AppCompatActivity{ 

EditText et_facheintrag; 
EditText et_raumeintrag; 
EditText et_farbeintrag; 
ListView lv_faecher; 
MyDBHandlerFaecher dbHandlerFaecher; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_faecher); 

    et_facheintrag = (EditText) findViewById(R.id.et_facheintrag); 
    et_raumeintrag = (EditText) findViewById(R.id.et_raumeintrag); 
    et_farbeintrag = (EditText) findViewById(R.id.et_farbeintrag); 
    lv_faecher = (ListView) findViewById(R.id.lv_faecher); 
    dbHandlerFaecher = new MyDBHandlerFaecher(this, null, null, 1); 

    printDatabase(); 
} 

//Add fach to database 
public void addButtonClicked(View view){ 
    Faecher fach = new Faecher(et_facheintrag.getText().toString(), et_raumeintrag.getText().toString(), 
           et_farbeintrag.getText().toString()); 
    dbHandlerFaecher.addFach(fach); 
    printDatabase(); 
} 

public void deleteButtonClicked(View view){ 
    String inputText = et_facheintrag.getText().toString(); 
    dbHandlerFaecher.deleteFach(inputText); 
    printDatabase(); 
} 

public void printDatabase(){ 
    String[] fromColumns = dbHandlerFaecher.databaseToStringArray(); 
    int[] toViews = new int[]{R.id.facheintrag, R.id.raumeintrag, R.id.farbeintrag}; 

    Cursor cursor; 
    cursor = dbHandlerFaecher.getWritableDatabase().rawQuery(" SELECT * FROM " + MyDBHandlerFaecher.TABLE_FAECHER + " WHERE 1 ", null); 
    //check if cursor is empty 
    if (cursor != null && cursor.getCount()>0) { 
     Log.d("Event", "Records do exist2"); 
    } 
    else { 
     Log.d("Event", "Records do not exist2"); 
    } 
    SimpleCursorAdapter fachadapter = new FaecherRowAdapter(this, R.layout.faecher_row, cursor, fromColumns,toViews, 0); 
    lv_faecher.setAdapter(fachadapter); 

MyDBHandlerFaecher:

public class MyDBHandlerFaecher extends SQLiteOpenHelper{ 

private static final int DATABASE_VERSION = 5; 
private static final String DATABASE_NAME = "faecher.db"; 
public static final String TABLE_FAECHER = "Faechertable"; 
public static final String COLUMN_ID = "_id"; 
public static final String COLUMN_NAME = "_faechername"; 
public static final String COLUMN_RAUM = "_faecherraum"; 
public static final String COLUMN_COLOR = "_faecherfarbe"; 

public MyDBHandlerFaecher(FaecherActivity context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
    super(context, DATABASE_NAME, factory, DATABASE_VERSION); 
} 

//Create the table 
@Override 
public void onCreate(SQLiteDatabase db) { 
    String query = "CREATE TABLE " + TABLE_FAECHER + "(" + 
      COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      COLUMN_NAME + " TEXT, " + 
      COLUMN_RAUM + " TEXT, " + 
      COLUMN_COLOR + " TEXT " + 
      ");"; 
    db.execSQL(query); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_FAECHER); 
    onCreate(db); 
} 

//Add a new row to the DB 
public void addFach(Faecher fach){ 
    ContentValues values = new ContentValues(); 

    values.put(COLUMN_NAME, fach.get_faechername()); 
    values.put(COLUMN_RAUM, fach.get_faecherraum()); 
    values.put(COLUMN_COLOR, fach.get_faecherfarbe()); 

    SQLiteDatabase db = getWritableDatabase(); 
    db.insert(TABLE_FAECHER, null, values); 
    db.close(); 
} 
//Delete row from DB 
public void deleteFach(String name){ 
    SQLiteDatabase db = getWritableDatabase(); 
    db.execSQL("DELETE FROM " + TABLE_FAECHER + " WHERE " + COLUMN_NAME + "=" + "\"" + name + "\"" + ";"); 
} 

public String[] databaseToStringArray() { 
    String[] fromColumns = new String[]{COLUMN_NAME, COLUMN_RAUM, COLUMN_COLOR}; 
    SQLiteDatabase db = getWritableDatabase(); 
    Cursor cursor = db.rawQuery(" SELECT * FROM " + TABLE_FAECHER + " WHERE 1 ", null); 
    //check if cursor is empty or not 
    if (cursor != null && cursor.getCount()>0) { 
     Log.d("Event", "Records do exist"); 
    } 
    else { 
     Log.d("Event", "Records do not exist"); 
    } 

    cursor.moveToFirst(); 
    while (!cursor.isAfterLast()) { 
     cursor.moveToNext(); 
    } 
    db.close(); 
    return fromColumns; 
} 

}

Faecher RowAdapter:

public class FaecherRowAdapter extends SimpleCursorAdapter { 

private int layout; 
private Context context; 

public FaecherRowAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { 
    super(context, layout, c, from, to, flags); 
    this.layout = layout; 
    this.context = context; 
} 

@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    Cursor c = getCursor(); 

    final LayoutInflater inflater = LayoutInflater.from(context); 
    View v = inflater.inflate(R.layout.faecher_row, parent, false); 
    bindView(v, context, c); 
    return v; 
} 

@Override 
public void bindView(View v, Context context, Cursor c) { 

    int fachNameColumn = c.getColumnIndex(MyDBHandlerFaecher.COLUMN_NAME); 
    int fachRaumColumn = c.getColumnIndex(MyDBHandlerFaecher.COLUMN_RAUM); 
    int fachFarbeColumn = c.getColumnIndex(MyDBHandlerFaecher.COLUMN_COLOR); 

    String fachName = c.getString(fachNameColumn); 
    String fachRaum = c.getString(fachRaumColumn); 
    String fachFarbe = c.getString(fachFarbeColumn); 

    //set the name of the entry 
    TextView facheintrag = (TextView) v.findViewById(R.id.facheintrag); 
    if (facheintrag != null){ 
     facheintrag.setText(fachName); 
    } 
    TextView raumeintrag = (TextView) v.findViewById(R.id.raumeintrag); 
    if (raumeintrag != null){ 
     raumeintrag.setText(fachRaum); 
    } 
    TextView farbeintrag = (TextView) v.findViewById(R.id.farbeintrag); 
    if (farbeintrag != null){ 
     farbeintrag.setText(fachFarbe); 
    } 
    } 

}

相关问题