我是android新手。我在恢复我存储在数据库中的通话记录时遇到了问题。
我使用以下代码存储通话记录:
Cursor managedCursor = cr.query(CallLog.Calls.CONTENT_URI, null,
CallLog.Calls.NUMBER + "=?",
new String[] {(ActiveUserContacts.get(i).getnumber()) },
null);
int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER);
int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE);
int date = managedCursor.getColumnIndex(CallLog.Calls.DATE);
int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION);
int name = managedCursor.getColumnIndex(CallLog.Calls.CACHED_NAME);
int NEW = managedCursor.getColumnIndex(CallLog.Calls.NEW);
while (managedCursor.moveToNext()) {
CallLogsModel Log = new CallLogsModel(Integer.toString(i),
managedCursor.getString(type),
managedCursor.getString(date),
managedCursor.getString(duration),
managedCursor.getString(number),
managedCursor.getString(name),
managedCursor.getString(NEW));
StoreData.addCallLog(UserNAME, Log);
}
managedCursor.close();
我用代码恢复它:
ContentValues values = new ContentValues();
values.put(CallLog.Calls.TYPE, PrevContents.get(i).getType());
values.put(CallLog.Calls.DATE, PrevContents.get(i).getDate());
values.put(CallLog.Calls.DURATION, PrevContents.get(i).getDuration());
values.put(CallLog.Calls.NUMBER, PrevContents.get(i).getNumber());
values.put(CallLog.Calls.CACHED_NAME, PrevContents.get(i).getName());
values.put(CallLog.Calls.NEW, PrevContents.get(i).getNew());
getActivity().getContentResolver().insert(CallLog.Calls.CONTENT_URI, values);
然而,除了通话时间以外的一切都恢复了。我犯了错误吗?
答案 0 :(得分:0)
您的PrevContents.get(i).getDate()
可能不是正确的呼叫记录类型或格式正确。我看到插入到调用日志中的记录的一些示例(例如,android adding number to Call logs)使用System.currentTimeMillis()作为日期,实际上是long类型。您可能希望在用于检索日期的代码中使用managedCursor.getLong(date)
,并将其存储为long。
另一个注意事项:当你查询通话记录时,看起来好像你得到1条记录,把它放在你的光标中,保存那条记录,然后为下一条记录做同样的事情,并通过以下方式获取所有记录手动循环遍历所有调用日志记录(我假设这是'i'的索引)。您不需要这样做 - 查询可以为您获取所有记录,然后您可以使用managedCursor.moveToNext()
进行循环。请查看http://android2011dev.blogspot.com/2011/08/get-android-phone-call-historylog.html以获取如何执行此操作的示例。当你进行修复时,你可能需要一个循环(虽然也可能有一种更简单的方法)。