我已经在“自定义列表视图”中尝试了以下代码。我尝试将“呼叫类型”替换为“传入”,“传出”和“未命中”,它显示了数字格式异常:对于输入字符串“ type”
assert cr != null;
if (cr.moveToLast()) {
for (int i = 0; i < cr.getCount(); i++) {
CallLogData cons = new CallLogData();
cons.setNumber(cr.getString(cr.getColumnIndex(CallLog.Calls. NUMBER)));
cons.setType(cr.getString( cr.getColumnIndex(CallLog.Calls. TYPE)));
callsListView.add(cons);
cr.moveToPrevious();
}
String dir = null;
int dircode = Integer.parseInt(getString(Integer.parseInt(CallLog.Calls. TYPE)));
switch (dircode) {
case CallLog.Calls.OUTGOING_TYPE:
dir = "OUTGOING";
break;
case CallLog.Calls.INCOMING_TYPE:
dir = "INCOMING";
break;
case CallLog.Calls.MISSED_TYPE:
dir = "MISSED";
break;
}
sb.append("\n ").append(dir);
}
cr.close();
这行我出错了
int dircode = Integer.parseInt(getString(Integer.parseInt(CallLog.Calls. TYPE)));
答案 0 :(得分:1)
CallLog.Calls.TYPE
是列名,而不是整数,因此无法将其解析为一个。
根据这一行,您的数据库也包含该类型的字符串,而不是数字。
@Query(value="SELECT * FROM mytable WHERE delivery_date >= ?1", nativeQuery = true)
and
Query(value="SELECT * FROM accounts_data WHERE updated \\= ?1", nativeQuery = true)
如果您希望cons.setType(cr.getString(cr.getColumnIndex(CallLog.Calls.TYPE)));
存储类型的字符串值,则应将开关大小写上移,并可能使用数据库中的CallLogData
,因为这似乎是类型为...尽管,您应该参考getInt
语句进行验证。
CREATE TABLE
如果数据库列确实是一个字符串,那么您想要这个
if (cr.moveToLast()) {
int numIdx = cr.getColumnIndex(CallLog.Calls.NUMBER);
int typeIdx = cr.getColumnIndex(CallLog.Calls.TYPE);
for (int i = 0; i < cr.getCount(); i++) {
CallLogData cons = new CallLogData();
cons.setNumber(cr.getString(numIdx));
String type;
int callType = cr.getInt(typeIdx);
switch (callType) {
case CallLog.Calls.OUTGOING_TYPE:
type = "OUTGOING";
break;
case CallLog.Calls.INCOMING_TYPE:
type = "INCOMING";
break;
case CallLog.Calls.MISSED_TYPE:
type = "MISSED";
break;
default:
type = "UNKNOWN";
}
cons.setType(type);
}
此外,如果您自己插入/创建了数据库值,则可以将整数类型更改为字符串值,而不是在查询时。