我正在研究一个电话录音机应用程序 1-通过服务和服务记录每个来电呼叫,保存SD卡中“My Call Recorder”文件夹中的每个文件,并将呼叫信息存储到sqlite数据库,如文件路径,来电号码,通话时长,通话日期和时间,呼叫类型(传入或传出)。 2.应用程序的MainActivity包含一个自定义列表视图,该视图使用简单光标适配器从该sqlite数据库填充。单击一个项目后,我从适配器获取游标对象,然后从中获取文件路径并打开另一个活动,然后使用该文件路径播放该媒体文件。这里用户可以删除,移动该媒体文件的副本。我可以在删除或移动文件时更新sqlite数据库条目。
问题 假设用户有10个呼叫被记录并存储在SD卡文件夹中,并且用户使用第三方文件管理器应用程序从“我的呼叫记录器”文件夹删除文件,但我的应用程序不知道它,当用户打开我的应用程序时,它仍然显示10个列表项,因为sqlite数据库仍然有10个条目。如何使用存储在SD卡上的文件更新我的sqlite?
修改 这是填充listview的方法。请建议在哪里实现该file.exists方法来检查每个文件?
public void populateListview() {
db = new DBSQL(MainActivity.this);
cursor = db.getAllData();
String[] from = new String[]{"displayname", "fileduration", "filedatetime", "calltype"};
int[] to = new int[]{R.id.tvNumber, R.id.tvDuration, R.id.tvDateTime, R.id.img2};
if (adapter == null) {
adapter = new TodoCursorAdapter(MainActivity.this, R.layout.custom_listview, cursor, from, to);
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int i) {
if (i == (cursor.getColumnIndex("displayname"))) {
String displayName = cursor.getString(i);
String contactName = getContactName(displayName, MainActivity.this);
TextView tv = (TextView) view;
if (contactName.isEmpty()) {
return false;
} else {
tv.setText(contactName);
return true;
}
}
return false;
}
});
lv.setAdapter(adapter);
} else {
adapter.changeCursor(cursor);
}
答案 0 :(得分:0)
在显示列表时检查文件是否存在
File f = new File(filePathString);
if(f.exists())
{
//do nothing
}
else
{
//remove entry from SqLite Table
}
像这样编辑populateListview()
public void populateListview() {
db = new DBSQL(MainActivity.this);
cursor = db.getAllData();
String[] from = new String[]{"displayname", "fileduration", "filedatetime", "calltype"};
int[] to = new int[]{R.id.tvNumber, R.id.tvDuration, R.id.tvDateTime, R.id.img2};
if (adapter == null) {
adapter = new TodoCursorAdapter(MainActivity.this, R.layout.custom_listview, cursor, from, to);
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int i) {
if (i == (cursor.getColumnIndex("displayname"))) {
File f = new File(filePathString);
if(!(f.exists()))
{
deleteRecordWithId(itemId);
cursor.requery();
notifyDataSetChanged();
}
String displayName = cursor.getString(i);
String contactName = getContactName(displayName, MainActivity.this);
TextView tv = (TextView) view;
if (contactName.isEmpty()) {
return false;
} else {
tv.setText(contactName);
return true;
}
}
return false;
}
});
lv.setAdapter(adapter);
} else {
adapter.changeCursor(cursor);
}