我有一个使用数据库的 Android 应用程序。我创建的 db 类将迭代数据库并使用单独的类来“HOLD”?每行。
public List<Poster> getAllPosters() {
List<Poster> posterList = new ArrayList<Poster>();
// Select All Query
String selectQuery = "SELECT * FROM " + "posters";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Poster poster = new Poster(Integer.parseInt(cursor.getString(0)),Integer.parseInt(cursor.getString(1)),Integer.parseInt(cursor.getString(2)),cursor.getString(3),cursor.getString(4),cursor.getString(5),cursor.getString(6),cursor.getString(7),cursor.getString(8));
// Adding contact to list
posterList.add(poster);
} while (cursor.moveToNext());
}
db.close(); // Closing database connection
// return contact list
return posterList;
}
海报类正如您所期望的那样。它有一个构造函数,其中每个变量都与列相关,以及一个设置和获取每个列值的方法。
那么现在每一行都是可以随时访问的自己的对象,还是作为对象的 Poster 类并且包含所有行?
此外,在应用程序终止或被 Poster 的新实例覆盖之前,该对象是否一直在内存中?
最佳答案
您创建多个 Poster 对象(Poster 类的实例)
Poster poster = new Poster( ... );
并将它们存储在 posterList
中(海报对象列表,List<Poster>
)
posterList.add(poster);
然后返回列表
return posterList;
您可以使用此列表通过以下方法访问检索到的对象:posterList.get(0)
创建的对象将存储在内存(堆上)中,直到被垃圾收集器删除。但是,如果您持有对它的引用,垃圾收集器将不会删除任何内容。在您的示例中,引用保存在 posterList
中所以不Poster
对象将被删除,直到您清除列表或删除对列表本身的所有引用。
关于java - 所有java对象都保存在内存中直到以某种方式被销毁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27409527/