Android 将表格读写到文本文件
我正在为Android开发一个成就系统,我只是在寻找一种简单的方法来存储所有成就和你的每项成就的进度。 我需要存储:id、标题、描述、分数、当前值、最大值和每个成就的图像路径 我尝试过使用SQLite服务和所有东西,但我似乎不能让它工作得那么好,所以我现在只想使用一些基本的文本表。我知道你使用文件缓冲区,我知道如何写入文本文件,我只是不确定格式化它们的最佳方法以及如何读取它们 我正在考虑将表格格式化如下:Android 将表格读写到文本文件,android,file,Android,File,我正在为Android开发一个成就系统,我只是在寻找一种简单的方法来存储所有成就和你的每项成就的进度。 我需要存储:id、标题、描述、分数、当前值、最大值和每个成就的图像路径 我尝试过使用SQLite服务和所有东西,但我似乎不能让它工作得那么好,所以我现在只想使用一些基本的文本表。我知道你使用文件缓冲区,我知道如何写入文本文件,我只是不确定格式化它们的最佳方法以及如何读取它们 我正在考虑将表格格式化如下: { { id = 0, Title = "Samp
{
{
id = 0,
Title = "Sample Achievement",
Desc = "Sample description",
Points = 5,
CurVal = 3,
MaxVal = 10,
Img = "path/to/img.jpg",
}
{
id = 1;
...
这将使我能够将每个成就作为其自己的子表或类似的内容进行访问,并且我可以围绕我获得的值构建一个成就对象,以供以后使用。您可以开始创建一个如下所示的数据库
private static String db_path = "/data/data/com.yourproject/databases/mysqlitedb";
private SQLiteDatabase sqliteDatabase = null;
public SQLiteDatabase getSQLiteDatabase() {
try {
sqliteDatabase = SQLiteDatabase.openDatabase(db_path, null,
SQLiteDatabase.OPEN_READWRITE);
sqliteDatabase.setVersion(1);
sqliteDatabase.setLocale(Locale.getDefault());
sqliteDatabase.setLockingEnabled(true);
return sqliteDatabase;
} catch (Exception e) {
e.getMessage();
return null;
}
}
public void createTable() {
try {
if (sqliteDatabase != null) {
sqliteDatabase.execSQL("CREATE TABLE IF NOT EXISTS "
+ "Achievement" + " (_id INTEGER PRIMARY KEY, Title TEXT, Desc TEXT,"
+ " Points NUMERIC," + " CurVal NUMERIC, MaxVal NUMERIC, "
+ " Img TEXT);");
}
} catch (Exception e) {
e.getMessage();
}
}
public int insert(String table, Hashtable<String, String> FieldsAndValues) {
// TODO Auto-generated method stub
int count=1;
try {
if (sqliteDatabase == null) {
sqliteDatabase = getSQLiteDatabase();
}
Enumeration e = FieldsAndValues.elements();
ContentValues initialValues = new ContentValues();
for (e = FieldsAndValues.keys(); e.hasMoreElements();) {
String key = (String) e.nextElement();
String value = (String) FieldsAndValues.get(key);
initialValues.put(key, value);
}
sqliteDatabase.insert(table, null, initialValues);
return count;
} catch (Exception e) {
e.getMessage();
return -1;
}
}
之后,您可以创建如下所示的表
private static String db_path = "/data/data/com.yourproject/databases/mysqlitedb";
private SQLiteDatabase sqliteDatabase = null;
public SQLiteDatabase getSQLiteDatabase() {
try {
sqliteDatabase = SQLiteDatabase.openDatabase(db_path, null,
SQLiteDatabase.OPEN_READWRITE);
sqliteDatabase.setVersion(1);
sqliteDatabase.setLocale(Locale.getDefault());
sqliteDatabase.setLockingEnabled(true);
return sqliteDatabase;
} catch (Exception e) {
e.getMessage();
return null;
}
}
public void createTable() {
try {
if (sqliteDatabase != null) {
sqliteDatabase.execSQL("CREATE TABLE IF NOT EXISTS "
+ "Achievement" + " (_id INTEGER PRIMARY KEY, Title TEXT, Desc TEXT,"
+ " Points NUMERIC," + " CurVal NUMERIC, MaxVal NUMERIC, "
+ " Img TEXT);");
}
} catch (Exception e) {
e.getMessage();
}
}
public int insert(String table, Hashtable<String, String> FieldsAndValues) {
// TODO Auto-generated method stub
int count=1;
try {
if (sqliteDatabase == null) {
sqliteDatabase = getSQLiteDatabase();
}
Enumeration e = FieldsAndValues.elements();
ContentValues initialValues = new ContentValues();
for (e = FieldsAndValues.keys(); e.hasMoreElements();) {
String key = (String) e.nextElement();
String value = (String) FieldsAndValues.get(key);
initialValues.put(key, value);
}
sqliteDatabase.insert(table, null, initialValues);
return count;
} catch (Exception e) {
e.getMessage();
return -1;
}
}
您可以像下面这样将数据插入到表中
private static String db_path = "/data/data/com.yourproject/databases/mysqlitedb";
private SQLiteDatabase sqliteDatabase = null;
public SQLiteDatabase getSQLiteDatabase() {
try {
sqliteDatabase = SQLiteDatabase.openDatabase(db_path, null,
SQLiteDatabase.OPEN_READWRITE);
sqliteDatabase.setVersion(1);
sqliteDatabase.setLocale(Locale.getDefault());
sqliteDatabase.setLockingEnabled(true);
return sqliteDatabase;
} catch (Exception e) {
e.getMessage();
return null;
}
}
public void createTable() {
try {
if (sqliteDatabase != null) {
sqliteDatabase.execSQL("CREATE TABLE IF NOT EXISTS "
+ "Achievement" + " (_id INTEGER PRIMARY KEY, Title TEXT, Desc TEXT,"
+ " Points NUMERIC," + " CurVal NUMERIC, MaxVal NUMERIC, "
+ " Img TEXT);");
}
} catch (Exception e) {
e.getMessage();
}
}
public int insert(String table, Hashtable<String, String> FieldsAndValues) {
// TODO Auto-generated method stub
int count=1;
try {
if (sqliteDatabase == null) {
sqliteDatabase = getSQLiteDatabase();
}
Enumeration e = FieldsAndValues.elements();
ContentValues initialValues = new ContentValues();
for (e = FieldsAndValues.keys(); e.hasMoreElements();) {
String key = (String) e.nextElement();
String value = (String) FieldsAndValues.get(key);
initialValues.put(key, value);
}
sqliteDatabase.insert(table, null, initialValues);
return count;
} catch (Exception e) {
e.getMessage();
return -1;
}
}
public int insert(字符串表、哈希表字段和值){
//TODO自动生成的方法存根
整数计数=1;
试一试{
if(sqliteDatabase==null){
sqliteDatabase=getSQLiteDatabase();
}
枚举e=FieldsAndValues.elements();
ContentValues initialValues=新的ContentValues();
对于(e=FieldsAndValues.keys();e.hasMoreElements();){
字符串键=(字符串)e.nextElement();
字符串值=(字符串)字段和值.get(键);
initialValues.put(键,值);
}
insert(表,null,初始值);
返回计数;
}捕获(例外e){
e、 getMessage();
返回-1;
}
}
记住,所有这三个方法都应该在一个类下
如果您能够管理创建数据库和表(通过在初始活动中调用这些方法),插入数据将是小菜一碟,这将对您有所帮助