我需要在Android上的sqlite数据库中存储2d enum数组,所以最简单的方法似乎是将其转换为字符串(例如CSV字符串)以存储在数据库中,然后在检索时再返回。将二维数组转换为字符串并在Java中再次返回?
如何在java中做到这一点?
MyEnum[][] myArray;
感谢
我需要在Android上的sqlite数据库中存储2d enum数组,所以最简单的方法似乎是将其转换为字符串(例如CSV字符串)以存储在数据库中,然后在检索时再返回。将二维数组转换为字符串并在Java中再次返回?
如何在java中做到这一点?
MyEnum[][] myArray;
感谢
如果你想整个二维数组转换成一个字符串,你可以使用一个CSV型编码,但你必须保护任何特殊字符(典型的逗号分隔符),以免弄乱字段分隔。一种快速(而且很脏)的方法是对每个值使用enc = URLEncoder.encode(val, "UTF-8")
,然后使用val = URLDecoder.decode(enc, "UTF-8")
。
你也必须使用另一个分离器(例如\n
)来分隔行:
String write(MyENum[][] myArray) {
String res = "";
for (int iRow = 0; iRow < myArray.length; iRow++) {
for (int iCol = 0; iCol < myArray[iRow].length; iCol++)
res += URLEncoder.encode(myArray[iRow][iCol].name(), "UTF-8")+",";
res += "\n";
}
}
(我将它让你不要在每一行的末尾添加额外的","
)。然后,回读:
MyEnum[][] read(String res) {
String[] rows = res.split("\n");
MyEnum[][] myArray = new MyEnum[rows.length][];
for (int iRow; iRow < rows.length; iRow++) {
String[] cols = rows[iRow].split(",");
myArray[iRow] = new MyEnum[cols.length];
for (int iCol = 0; iCol < cols.length; iCol++)
myArray[iRow][iCol] = MyEnum.valueOf(URLDecoder.decode(cols[iCol], "UTF-8"));
}
return myArray;
}
这是所有基于这样的事实,有你的枚举可进行转型name()
和valueOf()
方法,如@肖恩-F展示了在他链接的帖子。
http://stackoverflow.com/questions/229856/ways-to-save-enums-in-database –
谢谢肖恩,但它更多的转换2d数组到字符串,然后再回来我很关心 – fxfuture
为什么所有的降价? – fxfuture