我一直在尝试将我从android中的数据库中检索到的数据打印到列表视图中,但是当我收到数据时,我没有得到任何打印出的内容。我相信我可能会遗漏一些代码,但我不确定。
以下是我必须从数据库中检索和打印的代码:
public class DrinksDiaryActivity extends Activity {
private ListView listView;
public static ArrayList<String> ArrayOfDrink = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drinks_diary);
populateLayoutFromDrinkDiaryTitles();
}
public void onNewDrinkButtonClicked(View v){
Intent drinkEntry = new Intent(this, DrinkEntryActivity.class);
startActivity(drinkEntry);
}
private void populateLayoutFromDrinkDiaryTitles(){
DatabaseHandler db = new DatabaseHandler(this);
List<Drink> drinkEntry = db.getAllDrinkEntrys();
for (Drink cn : drinkEntry) {
String log = "Id: "+cn.getID()+", Drink: " + cn.getDrinkType() + ", Drink Volume: " + cn.getDrinkVolume() + ", Alcohol Percentage: " + cn.getAlcoholPercentage() + ", Time: " + cn.getTimeStamp() +
", Units: " + cn.getUnits();
System.out.println(log);
}
//db.getAllDrinkEntrys();
listView = (ListView) findViewById(R.id.drinkDiaryList);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, ArrayOfDrink);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Toast.makeText(getApplicationContext(),
((TextView) v).getText(), Toast.LENGTH_SHORT).show();
}
});
}
}
我的数据库处理程序:
public class DatabaseHandler extends SQLiteOpenHelper {
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DRINKS_DIARY_DATABASE = "drinksDiaryDatabase";
// Contacts table name
private final String DRINKS_DIARY_TABLE = "drinksDiaryDatabase";
// Contacts Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_DRINK_TYPE = "drinkType";
private static final String KEY_DRINK_VOLUME = "drinkVolume";
private static final String KEY_ALCOHOL_PERCENTAGE = "alcoholPercentage";
private static final String KEY_TIMESTAMP = "timeStamp";
private static final String KEY_UNITS = "units";
public DatabaseHandler(Context context) {
super(context, DRINKS_DIARY_DATABASE, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_DRINK_DIARY_TABLE = "CREATE TABLE " + DRINKS_DIARY_TABLE + "(" + KEY_ID + " INTEGER PRIMARY KEY, " + KEY_DRINK_TYPE
+ " TEXT, " + KEY_DRINK_VOLUME + " TEXT, " + KEY_ALCOHOL_PERCENTAGE + " TEXT, " + KEY_TIMESTAMP + " TEXT, " + KEY_UNITS + " TEXT" + ")";
db.execSQL(CREATE_DRINK_DIARY_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + DRINKS_DIARY_TABLE);
onCreate(db);
}
public void addDrinkEntry(Drink drinkEntry) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_DRINK_TYPE, drinkEntry.getDrinkType());
values.put(KEY_DRINK_VOLUME, drinkEntry.getDrinkVolume());
values.put(KEY_ALCOHOL_PERCENTAGE, drinkEntry.getAlcoholPercentage());
values.put(KEY_TIMESTAMP, drinkEntry.getTimeStamp());
values.put(KEY_UNITS, drinkEntry.getUnits());
db.insert(DRINKS_DIARY_TABLE, null, values);
db.close();
}
public Drink getDrinkEntry(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(DRINKS_DIARY_TABLE, new String[] {
KEY_ID, KEY_DRINK_TYPE, KEY_DRINK_VOLUME, KEY_ALCOHOL_PERCENTAGE, KEY_TIMESTAMP, KEY_UNITS,
}, KEY_ID + "=?", new String[] {
String.valueOf(id) }, null, null, null, null);
if (cursor != null){
cursor.moveToFirst();
}
Drink drinkEntry = new Drink(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5));
return drinkEntry;
}
public List<Drink> getAllDrinkEntrys() {
List<Drink> drinkEntryList = new ArrayList<Drink>();
String selectQuery = "SELECT * FROM " + DRINKS_DIARY_TABLE;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
Drink drinkEntry = new Drink();
drinkEntry.setID(Integer.parseInt(cursor.getString(0)));
drinkEntry.setDrinkType(cursor.getString(1));
drinkEntry.setDrinkVolume(cursor.getString(2));
drinkEntry.setAlcoholPercentage(cursor.getString(3));
drinkEntry.setTimeStamp(cursor.getString(4));
drinkEntry.setUnits(cursor.getString(5));
drinkEntryList.add(drinkEntry);
}
while (cursor.moveToNext());
}
return drinkEntryList;
}
public int getDrinkEntryCount() {
String countQuery = "SELECT * FROM " + DRINKS_DIARY_TABLE;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
cursor.close();
return cursor.getCount();
}
public int updateDrinkEntry(Drink drinkEntry) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_DRINK_TYPE, drinkEntry.getDrinkType());
values.put(KEY_DRINK_VOLUME, drinkEntry.getDrinkVolume());
values.put(KEY_ALCOHOL_PERCENTAGE, drinkEntry.getDrinkVolume());
values.put(KEY_TIMESTAMP, drinkEntry.getTimeStamp());
values.put(KEY_UNITS, drinkEntry.getUnits());
return db.update(DRINKS_DIARY_TABLE, values, KEY_ID + " = ?", new String[] { String.valueOf(drinkEntry.getID()) });
}
public void deleteDrinkEntry(Drink drinkEntry) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(DRINKS_DIARY_TABLE, KEY_ID + " = ?",
new String[] { String.valueOf(drinkEntry.getID()) });
db.close();
}
}
我的数据库:
public class Drink {
int _ID;
String _drinkType;
String _drinkVolume;
String _timeStamp;
String _alcoholPercentage;
String _units;
public Drink(){
}
public Drink(int id, String drinkType, String drinkVolume, String timeStamp, String alcoholPercentage, String units){
this._ID = id;
this._drinkType = drinkType;
this._drinkVolume = drinkVolume;
this._timeStamp = timeStamp;
this._alcoholPercentage = alcoholPercentage;
this._units = units;
}
public Drink(String drinkType, String drinkVolume, String timeStamp, String alcoholPercentage, String units){
this._drinkType = drinkType;
this._drinkVolume = drinkVolume;
this._timeStamp = timeStamp;
this._alcoholPercentage = alcoholPercentage;
this._units = units;
}
public int getID(){
return this._ID;
}
public void setID(int id){
this._ID = id;
}
public String getDrinkType(){
return this._drinkType;
}
public void setDrinkType(String drinkType){
this._drinkType = drinkType;
}
public String getDrinkVolume(){
return this._drinkVolume;
}
public void setDrinkVolume(String drinkVolume){
this._drinkVolume = drinkVolume;
}
public String getAlcoholPercentage(){
return this._alcoholPercentage;
}
public void setAlcoholPercentage(String alcoholPercentage){
this._alcoholPercentage = alcoholPercentage;
}
public String getTimeStamp(){
return this._timeStamp;
}
public void setTimeStamp(String timeStamp){
this._timeStamp = timeStamp;
}
public String getUnits(){
return this._units;
}
public void setUnits(String units){
this._units = units;
}
}
任何人都可以告诉我我做错了什么以及如何解决它?
由于
答案 0 :(得分:0)
您的ArrayList<String> ArrayOfDrink
为空,因为您尚未将任何数据添加到您的广告系列中,而是直接在ArrayList
中设置了ListView
。
我只是添加了饮料类型来展示演示。您可以根据需要添加任何详细信息。在ArrayList
中添加数据,如下所示:
private void populateLayoutFromDrinkDiaryTitles(){
DatabaseHandler db = new DatabaseHandler(this);
List<Drink> drinkEntry = db.getAllDrinkEntrys();
for (Drink cn : drinkEntry) {
String log = "Id: "+cn.getID()+", Drink: " + cn.getDrinkType() + ", Drink Volume: " + cn.getDrinkVolume() + ", Alcohol Percentage: " + cn.getAlcoholPercentage() + ", Time: " + cn.getTimeStamp() +
", Units: " + cn.getUnits();
System.out.println(log);
ArrayOfDrink.add(cn.getDrinkType().toString);
}