我的sqlite数据库中有一个代表HEX颜色值的文本字段,例如" 92B01C"。我用一个光标填充listview:
data = database.query("threads", newfields, where_clause, null, null, null, "CAST(" + newfields[0] + " AS TEXT)" + " " + "COLLATE NOCASE ASC");
dataAdapter.changeCursor(data);
dataAdapter.getCursor().requery();
其中newfields [0]是sqlite数据库十六进制颜色字段。
我的目标是按照彩虹顺序'中的HEX颜色对列表视图进行排序,即所有RED阴影在一起,然后是绿色阴影等等。
我猜我必须将String十六进制值转换为RGB值,然后以某种方式将其应用于数据库查询。
所以我的问题是:
这样的db.query可以用于sqlite,还是我必须以某种方式在查询之外执行此操作?
如何将字符串十六进制值拆分为RGB颜色,以便它们可以按彩虹顺序排序?我想过使用Collections.sort但是那怎么会和database.query一起使用?
如果在db.query中无法实现如何在sqlite database.query之后将任何collections.sort应用到listview?
任何帮助都会很棒......
更新
感谢您提出的所有建议,请访问:
我创建了一个新的db整数字段" color_sortorder"我将用于颜色排序。
我循环db HEX颜色字符串字段并将其添加到arraylist。
while (colorrawdata.isAfterLast() == false) {
hexcoloritems.add(colorrawdata.getString(colorrawdata.getColumnIndex("colorref")));
colorrawdata.moveToNext();
}
然后我使用此比较器对arraylist进行排序:
class mycolorComparator implements Comparator<String> {
public int compare(String strA, String strB) {
float[] hsv1 = new float[3];
float[] hsv2 = new float[3];
int n1 = Integer.parseInt(strA, 16);
int n2 = Integer.parseInt(strB, 16);
Color.colorToHSV(n1, hsv1);
Color.colorToHSV(n2, hsv2);
if ((int)hsv1[0] == (int)hsv2[0]) {
return (int)hsv1[2] - (int)hsv2[2];
}
return (int)hsv1[0] - (int)hsv2[0];
}
}
然后我循环使用arraylist来填充新的db颜色排序字段。
for (int x = 0; x < hexcoloritems.size(); x++) {
database.execSQL("UPDATE threads SET color_sortorder='" + x + "' WHERE colorref='" + hexcoloritems.get(x) + "';");
}
结果很有希望但不太正确。颜色的列表视图似乎是分组但在绿色组的分组中,阴影不是从浅到深运行,而是随机排序(但正确的绿色阴影)。
这是结果订单(520的前20个)
Setting db color_sortorder to 0 where db colorref=FAFAFA
Setting db color_sortorder to 1 where db colorref=FAFAFA
Setting db color_sortorder to 2 where db colorref=000000
Setting db color_sortorder to 3 where db colorref=de605e
Setting db color_sortorder to 4 where db colorref=F2ACAC
Setting db color_sortorder to 5 where db colorref=C16363
Setting db color_sortorder to 6 where db colorref=FAFAFA
Setting db color_sortorder to 7 where db colorref=B61F1E
Setting db color_sortorder to 8 where db colorref=951A18
Setting db color_sortorder to 9 where db colorref=CC2523
Setting db color_sortorder to 10 where db colorref=ffd5d5
Setting db color_sortorder to 11 where db colorref=FFCECE
Setting db color_sortorder to 12 where db colorref=FFE1E1
Setting db color_sortorder to 13 where db colorref=FFD5D5
Setting db color_sortorder to 14 where db colorref=D64542
Setting db color_sortorder to 15 where db colorref=8E3230
Setting db color_sortorder to 16 where db colorref=D6403D
Setting db color_sortorder to 17 where db colorref=DB3D38
Setting db color_sortorder to 18 where db colorref=FFC1BF
Setting db color_sortorder to 19 where db colorref=D58582
问题,我想,与比较器有关,任何人都可以给我一些洞察它的问题吗?