【发布时间】:2014-09-08 10:17:46
【问题描述】:
我无法以正确的方式将列表视图中的一些数据插入到我的数据库 sqLite。我有一个关于我的项目的课程:
public class Corsa
{
private int id;
public String oraPartenza;
public String oraArrivo;
public String partenza;
public String arrivo;
public String codiceLinea;
public String codiceCorsa;
public String tipoCorsa;
public String linkDettaglio;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
/*@Override
public String toString() {
return oraPartenza + partenza + oraArrivo + arrivo;
}*/
public Corsa() {
}
public Corsa(String partenza, String arrivo, String oraPartenza, String oraArrivo) {
super();
this.arrivo = arrivo;
this.partenza = partenza;
this.oraPartenza = oraPartenza;
this.oraArrivo = oraArrivo;
}
// partenza
public String getPartenza() {
return partenza;
}
public void setPartenza(String partenza) {
this.partenza = partenza;
}
// arrivo
public String getArrivo() {
return arrivo;
}
public void setArrivo(String arrivo) {
this.arrivo = arrivo;
}
// ora partenza
public String getOraPartenza() {
return oraPartenza;
}
public void setOraPartenza(String oraPartenza) {
this.oraPartenza = oraPartenza;
}
// ora arrivo
public String getOraArrivo() {
return oraArrivo;
}
public void setOraArrivo(String oraArrivo) {
this.oraArrivo = oraArrivo;
}
}
该类用于从网络检索信息并将数据放入列表视图中。完美运行,我有一个带有自定义适配器的列表视图,其中显示了我想要的每个数据。现在我将从该列表视图中获取数据并创建另一个列表,例如,仅从所选项目中的“Partenza”和“Arrivo”并将它们放入。我创建的助手:
public class SqlHelper extends SQLiteOpenHelper {
//Do un nome al DB
private static final String DB_NOME = "PREF";
private SqlHelper mMioDbHelper = null;
SQLiteDatabase db;
// variabili x inserimento
private static final String KEY_ID = "id";
private static final String KEY_PARTENZA = "partenza";
private static final String KEY_ORA_PARTENZA = "oraPartenza";
private static final String KEY_ARRIVO = "arrivo";
private static final String KEY_ORA_ARRIVO = "oraArrivo";
String TABLE_PREFERITI = "preferiti";
/**
* Numero della versione del database.
*
* La numerazione della vesione del database deve iniziare dal numero 1.
* Quando viene specificata una nuova versione android useguirà la funzione onUpgrade.
*/
private static final int DB_VERSIONE = 1;
public SqlHelper(Context context) {
super(context, DB_NOME, null, DB_VERSIONE);
}
@Override
public void onCreate(SQLiteDatabase db) {
/*
* creazione della tabella PREFERITI
*/
String sql = "CREATE TABLE preferiti";
sql += "(_id INTEGER PRIMARY KEY,";
sql += "partenza TEXT NOT NULL,";
sql += "arrivo TEXT,";
sql += "oraPartenza TEXT,";
sql += "oraArrivo TEXT);";
//Eseguo la query
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS "+ DB_NOME);
onCreate(db);
}
public void addCorsa(Corsa corsaDett, int id) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_ID, corsaDett.getId());
values.put(KEY_PARTENZA, corsaDett.getPartenza());
values.put(KEY_ORA_PARTENZA, corsaDett.getOraPartenza());
values.put(KEY_ARRIVO, corsaDett.getArrivo());
values.put(KEY_ORA_ARRIVO, corsaDett.getOraArrivo());
// insert valori
db.insert(TABLE_PREFERITI, null, values);
// chiudo il db
db.close();
Log.d("addCorsa", corsaDett.toString());
}
//Get All Corse
public List<Corsa> getAllCorse() {
List<Corsa> corse = new ArrayList<Corsa>();
// 1. build the query
String query = "SELECT * FROM " + TABLE_PREFERITI;
// 2. get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
// 3. go over each row, build book and add it to list
Corsa corsaAll = null;
if (cursor.moveToFirst()) {
do {
corsaAll = new Corsa();
corsaAll.setId(Integer.parseInt(cursor.getString(0)));
corsaAll.setPartenza((cursor.getString(1)));
corsaAll.setArrivo((cursor.getString(2)));
corsaAll.setOraPartenza(((cursor.getString(3))));
corsaAll.setOraArrivo((cursor.getString(4)));
// Add book to books
corse.add(corsaAll);
} while (cursor.moveToNext());
}
Log.d("getAllBooks()", corse.toString());
// return books
return corse;
}
//Deleting single row
public void deleteRow(Corsa corsa) {
// 1. get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
// 2. delete
db.delete(TABLE_PREFERITI,
KEY_ID + " = ?",
new String[] { String.valueOf(corsa.getId())}
);
// 3. close
db.close();
Log.d("deleteCorsa", corsa.toString());
}
}
这是item中的onlongClick:
mListView.setOnItemLongClickListener(new OnItemLongClickListener(){
@Override
public boolean onItemLongClick(AdapterView<?> p1, View p2, int p3, long p4)
{
addToDb(mListView.toString());
return true;
}
});
和方法addToDB:
protected void addToDb (String input) {
value++;
mMioDbHelper = new SqlHelper(this);
mMioDbHelper.addCorsa(new Corsa(input, input, input, input), value);
corsa = mMioDbHelper.getAllCorse();
}
以这种方式检索其他活动中的数据:
mMioDbHelper = new SqlHelper(getActivity());
list = mMioDbHelper.getAllCorse();
if (list.isEmpty()) {
listaPreferiti.setAdapter(null);
} else {
adapter = new PreferitiItemAdapter(getActivity(), list);
listaPreferiti.setAdapter(adapter);
}
现在..它会保存数据,但它不会显示适配器位置的每个项目,但似乎它需要整个字符串 oraPartenza " / " partenza " " + oraArrivo " / " arrivo; 并在适配器中重复整行。插入有问题?
【问题讨论】:
标签: android sqlite listview android-listview