2015-03-30 16 views
0

我有一個sqlite數據庫包含一些TextViews的信息,如文本,背景顏色和更改後的TextView的id,因爲我有一個TableView與60個TextViews。 當用戶觸摸其中的一個時,他可以更改TextView的內容和背景顏色。 我的問題是,當我收回所有保存的TextView時,我將它們放入列表中。Android如何從Sqlite查詢加載n TextViews與數據

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()看,我採取一切物資從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 S中的從用戶觸摸的所有本草。 我該如何在List materia中使用單個ID? 類似於:

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

但這不起作用。 有什麼問題嗎?

回答

0

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

您只需創建並填寫您的對象的集合。爲了顯示這個集合(列表),你應該使用一個ListView和一些像ArrayAdapter或BaseAdapter這樣的適配器。適配器通常有一個方法getView(),它負責填充所需數據的列表項(單元格)。而且我在代碼中看不到任何ListView或Adatpter。

+0

好的,我不確定我是否理解你。 我更改了從存儲到數據庫中的ID觸摸的TextView。 但我不知道如何進入對象材料的單個字段。 列表 materia是一個對象列表,對不對? 那麼,我可以訪問單個字段嗎?像'id = materia.id' 或者爲了做到這一點,我需要你在你的答案上寫的getView()? 你可以發表一些代碼,所以我可以理解你的意思嗎? – Mario 2015-03-30 21:43:15

+0

如果你有一個Materie對象的列表,所以這個集合中有一個你正在尋找的對象,對吧?因此,只需找到您需要的對象,並從中獲得所需的所有信息。迭代集合以查找您需要的目標對象。當你發現目標對象時,你可以像你提到的那樣訪問它的數據,比如id = materia.id。 – Stan 2015-03-30 21:50:12

+0

啊,你不明白'TextView'與你存儲在sql db中的文本完全沒有關係。你不能存儲VIEW事物,但你只能存儲一些你可以從'View'獲得的數據。就像使用'textView.getText()''TextView'的'String'或者textview文本的顏色一樣。你不能存儲視覺部分。 Materie中沒有任何TextView。 TextView是佈局的一部分。然後你編寫'setContentView(R.layout.activity_set_orario);'這意味着佈局文件'activity_set_orario.xml'可以包含一些'TextViews',所以你可以使用'findViewById()'找到'TextView'。 – Stan 2015-03-30 21:59:00