我有一个sqlite db,其中包含一些TextView的信息,例如文本,背景色和已更改TextView的ID,因为我有一个带有60个TextView的TableView。 当用户触摸其中之一时,他可以更改TextView的内容和背景颜色。 我的问题是,当我取回所有保存的TextView时,将它们放入列表中。

Materia.java是我的对象

package com.ddz.diarioscolastico;

public class Materia {

private int _id;
private String _nome;
private int _colore;
//private int _giorno;
//private int _ora;

//Empty constructor
public Materia(){

}
//Constructor
public Materia(int id, String nome, int colore){
    this._id = id;
    this._nome = nome;
    this._colore = colore;

}
// constructor
public Materia(String nome, int colore){
    this._nome = nome;
    this._colore = colore;
}
// getting ID
public int getID(){
    return this._id;
}

// setting id
public void setID(int id){
    this._id = id;
}

//getting color
public int getColor(){

    return this._colore;

}
//setting color
public void setColor(int colore){

    this._colore = colore;

}
//getting nome materia
public String getMateria() {

    return this._nome;

}
//setting nome materia
 public void setMateria(String nome) {

     this._nome = nome;

 }
}

使用类MySQLiteHelper,我管理数据库:

public class MySQLiteHelper extends SQLiteOpenHelper {

//Database version
private static final int DATABASE_VERSION = 1;
//Database name
private static final String DATABASE_NAME = "materie.db";
//Materie table name
public static final String TABLE_MATERIE = "materie";
//Materie columns table names
public static final String COLUMN_ID = "_id";
public static final String COLUMN_NAME = "nome";
public static final String COLUMN_COLOR = "colore";

public MySQLiteHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_MATERIE_TABLE = "CREATE TABLE " + TABLE_MATERIE + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_NAME + " TEXT,"
            + COLUMN_COLOR + " INTEGER," + ")";
    db.execSQL(CREATE_MATERIE_TABLE);
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_MATERIE);

    // Create tables again
    onCreate(db);
}

// Adding new contact
public void addMateria(Materia materia) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(COLUMN_NAME, materia.getMateria()); // Materia Name
    values.put(COLUMN_COLOR, materia.getColor()); // Materia color

    // Inserting Row
    db.insert(TABLE_MATERIE, null, values);
    db.close(); // Closing database connection
}

// Getting single contact
public Materia getMateria(int id) {
    SQLiteDatabase db = this.getReadableDatabase();

    //ELIMINATO COLUMN_DAY e COLUMN_HOUR
    Cursor cursor = db.query(TABLE_MATERIE, new String[] { COLUMN_ID,
                    COLUMN_NAME, COLUMN_COLOR }, COLUMN_ID + "=?",
            new String[] { String.valueOf(id) }, null, null, null, null);
    if (cursor != null)
        cursor.moveToFirst();

    Materia materia = new Materia(Integer.parseInt(cursor.getString(0)),
            cursor.getString(1),
            Integer.parseInt(cursor.getString(2)));
    // return contact
    return materia;
}

// Getting All Contacts
public List<Materia> getAllMaterie() {
    List<Materia> materiaList = new ArrayList<Materia>();
    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_MATERIE;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            Materia materia = new Materia();
            materia.setID(Integer.parseInt(cursor.getString(0)));
            materia.setMateria(cursor.getString(1));
            materia.setColor(Integer.parseInt(cursor.getString(2)));
            // Adding contact to list
           materiaList.add(materia);
        } while (cursor.moveToNext());
    }

    // return contact list
    return materiaList;
}

// Getting contacts Count
public int getMateriaCount() {
    String countQuery = "SELECT  * FROM " + TABLE_MATERIE;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    cursor.close();

    // return count
    return cursor.getCount();
}

// Updating single contact
public int updateMateria(Materia materia) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(COLUMN_NAME, materia.getMateria());
    values.put(COLUMN_COLOR, materia.getColor());

    // updating row
    return db.update(TABLE_MATERIE, values, COLUMN_ID + " = ?",
            new String[] { String.valueOf(materia.getID()) });
}

// Deleting single contact
public void deleteMateria(Materia materia) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_MATERIE, COLUMN_ID + " = ?",
            new String[] { String.valueOf(materia.getID()) });
    db.close();
}

}//Close class database

如使用public List<Materia> getAllMaterie()方法public List<Materia> getAllMaterie()看到的,我从sqlite获取所有物料并将它们放入列表中。

管理数据的活动的onCreate

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_set_orario);

    MySQLiteHelper db = new MySQLiteHelper(this);

    //Get all materie inside database
    List<Materia> materia = db.getAllMaterie();
    for (Materia mat : materia) {
        //Change with loop all changed TextView into database by id
        TextView changedtextview = (TextView) findViewById(mat.getID());
        changedtextview.setText(mat.getMateria());
    }


}//Fine oncreate

在我的活动中,我需要取回输入到数据库中的所有材料,以更改用户触摸过的TextView 如何获取列表材料中的单个ID? 就像是:

 TextView changedtextview = (TextView)findViewById(materia._id);

但这是行不通的。 有什么问题吗?

#1楼 票数:0 已采纳

在做

List<Materia> materia = db.getAllMaterie();

您只需创建并填充对象的集合即可。 要显示此集合(列表),应将ListView与某些适配器(如ArrayAdapter或BaseAdapter)结合使用。 适配器通常具有方法getView() ,该方法负责用所需的数据填充列表项(单元格)。 而且我在您的代码中看不到任何ListView或adatpter。

  ask by translate from so

未解决问题?本站智能推荐:

3回复

Android-将sqlite数据库中的值加载到arraylist

我是android的新手。 我有一个使用SQLite DB的应用程序。 我需要将值从数据库推送到类型为object的arraylist。 我使用的代码在这里给出。 这不能正常工作。 没有显示任何错误,但我没有得到arraylist objectList的值 请帮帮我..谢谢你..
1回复

尝试将sqlite表加载为ArrayList在Android中

我正在尝试将sqlite表加载为arraylist,以便可以使用其中的数据。 我不太确定sqlite查询,但是我已经建立了一个类来按原样操作字符串,这让我更满意。 我可以加载单个行,但不确定如何将整个表作为arraylist。 我的主要方法中有以下方法 和我的dbAdapter /
1回复

检索数据-SQLite查询与从内存中存储和检索数据

对于电影SQLite db,我具有以下数据结构(我将使其保持简单,实际表具有更多字段): 类型-(id,name) 电影-(id,genreId,name,year) 场景-(id,movieId,name) 例如: 类型-(7,惊悚片) 电影-(250,7,第
1回复

Android:将ArrayList存储到sqlite数据库中

我已经将头撞在墙上有一段时间了,我不知道如何将ArrayList存储到sqlite列中。 我觉得它的工作方式如下: 存储到数据库中: 但是,我不确定如何做到这一点? 有任何指导或建议吗?
7回复

在Android中的SQLite数据库中保存ArrayList

我一直在Android上使用SQLite,我想在表中的列中添加一个arraylist,然后将数据作为arraylist获取。 arraylist是Longs的列表。 我注意到SQL有一个存储BLOBS的选项,但是看起来我需要先将arraylist转换为byte [],然后才能将它作为blob
4回复

在Android的SQLite数据库中插入数组

我想将工作日保存在数据库中,所以我想通过将int值分配给每一天来存储它。 即 1- >选择, 0- >未选择。 星期一= 0/1 星期二= 0/1 。 。 。 。 。 星期日= 0/1。 但这将在DB中创建7列。 因此,我在考虑是否有人可以将其存储
1回复

如何仅在android中的SQLite中使用按钮单击更新状态

我正在开发一个 SQLite 数据库。 我创建了一个表,其架构是:名称、图像、已选择。 消息的初始状态为 0。 我正在使用数据库上的setStatus()方法更新按钮单击时的状态。 但状态不会改变。 我想单击我的 Button 一次并将状态设置为 1,然后再次单击它以将状态重新设置为 0。 set
2回复

如何在Android应用程序中加速数据库(SQLite)中的大数据插入

我有一种情况,我必须在数据库中插入数据,并且数据非常大,在ArrayList 。 数据插入一个循环,如下所示: 现在测试用例大约需要1分钟以上,实际数据预计超过10分钟,而目标是将时间保持在30秒以下。 数据无法减少。 我的问题是: 如何提高速度 有没有办法避免重复调用sq