【发布时间】:2017-02-02 03:47:01
【问题描述】:
应用程序:我有一个应用程序可以创建多台机器:
- ID、名称和位置
每台机器我都要让用户输入收入
- id、note、date、money、machines_id
问题:我需要将匹配 machine_id 中的所有注释填充到 ListView。
我的尝试:创建 DBHelper 方法来获取我需要的信息(备注和日期)。
- db.rawQuery("SELECT note, date FROM income WHERE machines_id = "+machinesId+"", null);
这目前适用于 DB Browser for SQLite,但我不知道如何将其添加到 ListView 适配器并将其设置为相应的 TextView
我的问题: 完成 DBHelper 方法 和 自定义适配器 之间的联合以仅获取所需信息的最佳方法是什么在 TextViews 中? (匹配machines_id的日期和备注)
如果您需要任何其他课程或有任何反馈,请不要犹豫,放纵我!
DBHelper
public class DBHelpter extends SQLiteOpenHelper {
private static final String DB_NAME = "machines.db";
private static final int DB_VERSION = 1;
public static final String TABLE_MACHINES = "machines";
public static final String MACHINES_COLUMN_NAME = "name";
public static final String MACHINES_COLUMN_LOCATION = "location";
public static final String MACHINES_ID = "id";
public static final String TABLE_INCOME = "income";
public static final String INCOME_COLUMN_MONEY = "money";
public static final String INCOME_COLUMN_DATE = "date";
public static final String INCOME_COLUMN_NOTE = "note";
public static final String INCOME_ID = "id";
public static final String INCOME_COLUMN_MACHINES_ID = "machines_id";
private Context mContext;
public DBHelpter(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String query1 = String.format("CREATE TABLE " + TABLE_MACHINES + "("
+ MACHINES_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ MACHINES_COLUMN_NAME + " TEXT NOT NULL, "
+ MACHINES_COLUMN_LOCATION + " TEXT NOT NULL)",
TABLE_MACHINES, MACHINES_COLUMN_NAME, MACHINES_COLUMN_LOCATION, MACHINES_ID);
String query2 = String.format("CREATE TABLE " + TABLE_INCOME + "("
+ INCOME_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ INCOME_COLUMN_MONEY + " REAL NOT NULL, "
+ INCOME_COLUMN_DATE + " DATE NOT NULL, "
+ INCOME_COLUMN_NOTE + " TEXT NOT NULL, "
+ INCOME_COLUMN_MACHINES_ID + " INTEGER NOT NULL)",
TABLE_INCOME, INCOME_ID, INCOME_COLUMN_MONEY, INCOME_COLUMN_DATE, INCOME_COLUMN_NOTE, INCOME_COLUMN_MACHINES_ID);
db.execSQL(query1);
db.execSQL(query2);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String query1 = String.format("DROP TABLE IF EXISTS " + TABLE_MACHINES);
String query2 = String.format("DROP TABLE IF EXISTS " + TABLE_INCOME);
db.execSQL(query1);
db.execSQL(query2);
onCreate(db);
}
public void insertNewMachine(String name, String location){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(MACHINES_COLUMN_NAME, name);
values.put(MACHINES_COLUMN_LOCATION, location);
db.insertWithOnConflict(TABLE_MACHINES, null, values, SQLiteDatabase.CONFLICT_REPLACE);
db.close();
}
public void insertNewIncome(Double money, String date, String note, long machines_id){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(INCOME_COLUMN_MONEY, money);
values.put(INCOME_COLUMN_DATE, date);
values.put(INCOME_COLUMN_NOTE, note);
values.put(INCOME_COLUMN_MACHINES_ID, machines_id);
db.insertWithOnConflict(TABLE_INCOME, null, values, SQLiteDatabase.CONFLICT_REPLACE);
db.close();
}
public void getIncomeOfMachine(long machinesId){
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT machines_id, SUM(money) AS total FROM income WHERE machines_id = "+machinesId+"", null);
cursor.moveToFirst();
double total_amount = cursor.getDouble(cursor.getColumnIndex("total"));
return total_amount;
}
public ArrayList<MachinesClass> getAllMachines(){
ArrayList<MachinesClass> machinesList = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM "+ TABLE_MACHINES, null);
while (cursor.moveToNext()){
final long id = cursor.getLong(cursor.getColumnIndex(MACHINES_ID));
final String name = cursor.getString(cursor.getColumnIndex(MACHINES_COLUMN_NAME));
final String location = cursor.getString(cursor.getColumnIndex(MACHINES_COLUMN_LOCATION));
machinesList.add(new MachinesClass(id, name, location));
}
cursor.close();
db.close();
return machinesList;
}
public ArrayList<String> getInfoFromMachine(long machinesId){
ArrayList<String> all_notes = new ArrayList<>();
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT note, date FROM income WHERE machines_id = "+machinesId+"",null);
cursor.moveToFirst();
while (cursor.moveToNext()){
String note = cursor.getString(cursor.getColumnIndex("note"));
String date = cursor.getString(cursor.getColumnIndex("date"));
all_notes.add(date);
all_notes.add(note);
}
db.close();
cursor.close();
return all_notes;
}
}
列表适配器
public class ListAdapter extends BaseAdapter {
private Context mContext;
private DBHelpter mDBHelpter;
private ArrayList<IncomeClass> mList;
public ListAdapter(Context mContext, DBHelpter mDBHelper, ArrayList<IncomeClass> mList){
this.mContext = mContext;
this.mDBHelpter = mDBHelper;
this.mList = mList;
}
@Override
public int getCount() {
return mList != null ? mList.size(): 0;
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
mDBHelpter = new DBHelpter(mContext);
SQLiteDatabase db = mDBHelpter.getReadableDatabase();
ViewHolder viewHolder;
if (convertView == null){
convertView = LayoutInflater.from(mContext).inflate(R.layout.notes_list, parent, false);
viewHolder = new ViewHolder(convertView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
// Cursor info = mDBHelpter.getInfoFromMachine(currentNote.getId());
// viewHolder.mNote.setText(mDBHelpter.getInfoFromMachine(currentNote.getId()).toString());
// viewHolder.mNoteDate.setText(mDBHelpter.getInfoFromMachine(currentNote.getId()).toString());
return convertView;
}
private class ViewHolder {
private TextView mNote, mNoteDate;
public ViewHolder(View view){
mNote = (TextView) view.findViewById(R.id.tvNote);
mNoteDate = (TextView) view.findViewById(R.id.tvNoteDate);
}
}
}
【问题讨论】:
标签: android sqlite listview android-adapter