如何使用Treeset在android中按日期降序获取不同的呼叫日志列表
在我的应用程序中,我只需要使用distinct和按日期降序排序的调用日志。我尝试了下面的代码,但没有得到确切的结果 我的代码如下如何使用Treeset在android中按日期降序获取不同的呼叫日志列表,android,calllog,Android,Calllog,在我的应用程序中,我只需要使用distinct和按日期降序排序的调用日志。我尝试了下面的代码,但没有得到确切的结果 我的代码如下 public class MainActivity extends Activity { // List<CLogItem> clogitems = new ArrayList<CLogItem>(); Set clogitems = new TreeSet(); @Override
public class MainActivity extends Activity {
// List<CLogItem> clogitems = new ArrayList<CLogItem>();
Set clogitems = new TreeSet();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void onClick(View v){
getCallDetails(this);
TextView tv1 = (TextView)findViewById(R.id.tv1);
String str = "";
Iterator sitr=clogitems.iterator();
while(sitr.hasNext())
{
CLogItem clitem=(CLogItem) sitr.next();
str = str + "P: " + clitem.No + "\n";
str = str + "N: " + clitem.Name + "\n";
str = str + "--------------------------------------------\n";
}
tv1.setText(str);
}
private void getCallDetails(Context context) {
StringBuffer stringBuffer = new StringBuffer();
Cursor cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI,
null, null, null, CallLog.Calls.DATE + " DESC");
int number = cursor.getColumnIndex(CallLog.Calls.NUMBER);
int date = cursor.getColumnIndex(CallLog.Calls.DATE);
int iname = cursor.getColumnIndex(CallLog.Calls.CACHED_NAME);
while (cursor.moveToNext()) {
CLogItem clitem = new CLogItem();
clitem.No = cursor.getString(number);
clitem.Name = cursor.getString(iname);
clitem.lDate = Long.valueOf(cursor.getString(date));
clogitems.add(clitem);
}
cursor.close();
}
public static class CLogItem implements Comparable {
String No;
String Name;
long lDate;
public CLogItem(){
this.No = "";
this.Name = "";
this.lDate = 0;
}
@Override
public int compareTo(Object arg0) {
CLogItem l = (CLogItem)arg0;
int fnResult = this.No.compareTo(l.No);
if( fnResult == 0 ){
if (lDate > l.lDate) {
return -1;
}
else if (lDate < l.lDate) {
return 1;
}
else {
return 0;
}
}
return fnResult;
}
}
}
公共类MainActivity扩展活动{
//List clogitems=new ArrayList();
Set clogitems=new TreeSet();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
公共void onClick(视图v){
getCallDetails(本);
TextView tv1=(TextView)findViewById(R.id.tv1);
字符串str=“”;
迭代器sitr=clogitems.Iterator();
while(sitr.hasNext())
{
CLogItem clitem=(CLogItem)sitr.next();
str=str+“P:”+clitem.No+“\n”;
str=str+“N:”+clitem.Name+“\N”;
str=str+“------------------------------------------------------------\n”;
}
tv1.setText(str);
}
私有void getCallDetails(上下文){
StringBuffer StringBuffer=新的StringBuffer();
Cursor Cursor=context.getContentResolver().query(CallLog.Calls.CONTENT_URI,
null,null,null,CallLog.Calls.DATE+“DESC”);
int number=cursor.getColumnIndex(CallLog.Calls.number);
int date=cursor.getColumnIndex(CallLog.Calls.date);
int iname=cursor.getColumnIndex(CallLog.Calls.CACHED_NAME);
while(cursor.moveToNext()){
CLogItem clitem=新的CLogItem();
clitem.No=cursor.getString(数字);
clitem.Name=cursor.getString(iname);
clitem.lDate=Long.valueOf(cursor.getString(date));
clogitems.add(clitem);
}
cursor.close();
}
公共静态类CLogItem实现了可比较的{
串号;
字符串名;
长时间;
公共CLogItem(){
这个。否=“”;
此。名称=”;
此值为0.lDate;
}
@凌驾
公共整数比较对象(对象arg0){
CLogItem l=(CLogItem)arg0;
int fnResult=此编号与(l.No)相比;
如果(fnResult==0){
如果(lDate>l.lDate){
返回-1;
}
否则如果(lDate
请帮我解决这个问题
提前感谢最后我得到了一个正确的解决方案
private void getCallDetails(Context context) {
StringBuffer stringBuffer = new StringBuffer();
Cursor cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI,
null, null, null, CallLog.Calls.NUMBER + "," + CallLog.Calls.DATE + " DESC");
int number = cursor.getColumnIndex(CallLog.Calls.NUMBER);
int date = cursor.getColumnIndex(CallLog.Calls.DATE);
int iname = cursor.getColumnIndex(CallLog.Calls.CACHED_NAME);
String curNo = "";
while (cursor.moveToNext()) {
String No = cursor.getString(number);
if( !No.equalsIgnoreCase(curNo) ){
CLogItem clitem = new CLogItem();
clitem.No = cursor.getString(number);
clitem.Name = cursor.getString(iname);
clitem.lDate = Long.valueOf(cursor.getString(date));
clogitems.add(clitem);
curNo = No;
}
}
cursor.close();
Collections.sort(clogitems);
}
我们不能在查询自身时通过使用组来实现这一点。因为在这种情况下,我们应该得到所有的值,然后检查可能性。如果我想获得前两个不同的项目,我仍然需要获得所有的值。因此,我认为GROUP BY将有助于..其工作正常,但如何使用此格式(dd-MMM-yyy-HH:mm)按日期时间筛选日志。例如,我想从这个日期和时间“2014年12月10日12:00”获取通话记录。这是不正确的。仅适用于连续的相同呼叫日志。