0

我有以下代码:

Uri uriSMS = Uri.parse("content://sms");
Cursor cur = getContentResolver().query(uriSMS, 
        new String[] {"_id", "thread_id", "address", "person", "date", "body", "type"},
        null, null, null);
startManagingCursor(cur);

String[] from = new String[]{"address", "body", "date"};
int[] to = new int[]{R.id.sms_from, R.id.sms_body, R.id.sms_date};
adapter = new SimpleCursorAdapter(this, R.layout.sms_row, cur, from, to);

setListAdapter(adapter);

目前我使用address列显示短信发送者,所以显示电话号码。我想用人名替换电话号码。我预计它person包含它,但对于大多数 SMS 来说它是空的。然后,date字段包含long值,当我想以格式显示它时DD.MM.YYYY。我想我可以覆盖setViewValue()来修复它。但是还有其他(更好的)解决方案吗?

我该如何解决这两个问题?

4

3 回答 3

1

要解决日期问题,您可以这样做

    DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
    formatter.format( Long.parseLong( dateString ) );  

对于发件人姓名,试试这个

    Cursor cs= context.getContentResolver().query(uri, new String[]{PhoneLookup.DISPLAY_NAME},condition,null,null);  
    cs.getString(cs.getColumnIndex(PhoneLookup.DISPLAY_NAME));
于 2013-10-15T20:06:03.293 回答
0

我认为person联系人中不存在的号码是空的。

对于日期:

String strDateTime = (String) DateFormat.format("yyyy-MM-dd kk:mm", new Date(longValue));
于 2013-10-15T20:02:11.833 回答
-1

尝试此方法以在短信中显示正确的日期和时间。在这你需要传递你从光标收到的日期

public String changeDate(long date) {
        SimpleDateFormat sdf = new SimpleDateFormat();
        Date dt = new Date(date);
        Date now = new Date();
        dt.setTime(date);

        if (now.getYear()==dt.getYear() && now.getMonth()==dt.getMonth() && now.getDate()==dt.getDate())
            sdf.applyPattern("h:mm a");
        else if (now.getYear()==dt.getYear())
            sdf.applyPattern("d MMM" + " " + "h:mm a");
        else
            sdf.applyPattern("d MMM yyyy" + " " + "h:mm a");

        return sdf.format(dt);
    }
于 2017-09-21T17:28:28.430 回答