【问题标题】:Possible bug with Samsung roms?三星rom可能存在错误?
【发布时间】:2012-02-02 18:30:10
【问题描述】:

我目前正在开发一个向用户显示联系人列表的应用程序。

在该列表中,必须显示联系人的姓名、联系人图片和电子邮件,所以我得到这样的列表:

final Cursor c = managedQuery(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,ContactsContract.CommonDataKinds.Email.TYPE + "="+ContactsContract.CommonDataKinds.Email.TYPE_HOME , null,ContactsContract.Contacts.DISPLAY_NAME);

int tamano= c.getCount();      

Log.e("USER", "The size of the contact list is : " + tamano);

事情是这样的……

我已经在 3 部三星手机(2 部 Galaxy SII 和 1 部 Galaxy ACE)和 2 部 HTC(1 部 HTC Desire S 和 1 部 HTC Wildfire)上试用过。

结果至少很有趣:

所有星系:

联系人列表的大小为:9

使用 HTC:

联系人列表大小为482

所有手机都与同一个gmail帐户同步,因此具有相同数量的联系人...

这怎么可能?三星 rom 中是否存在错误或其他问题?

您好!

***用解决方案编辑:

它有效!现在我知道问题出在哪里了:

ContactsContract.CommonDataKinds.Email.TYPE_HOME

问题是三星没有像 HTC 那样组织联系人,现在通过这个小改动解决了这个问题:

ContactsContract.CommonDataKinds.Email.TYPE_OTHER

现在所有联系人都出现在所有手机中(Galaxy Ace 除外,但可能是因为它有奇怪的 rom...)谢谢!

【问题讨论】:

    标签: android


    【解决方案1】:

    我会像这样更改您的查询...

    = managedQuery(ContactsContract.Data.CONTENT_URI
    , null
    , ContactsContract.DATA.MIMETYPE+"=? AND "+ContactsContract.CommonDataKinds.Email.TYPE+"=?"
    , new String[]{ContactsContract.CommonDataKinds.Email.Content_Item_Type, ContactsContract.CommonDataKinds.Email.TYPE_HOME}
    , ContactsContract.DATA.DISPLAY_NAME );
    

    我没有对此进行测试,但应该是正确的或类似的。

    显示光标以帮助调试的简单方法

    public static void displayCursor(Cursor c){
        int columnCount;
        if(c.moveToFirst()){
            columnCount = c.getColumnCount();
            do{
                Log.i(" ", "********************");
                for(int i=0;i<columnCount;i++){
                    try{ 
                        Log.i(c.getColumnName(i)+":", c.getString(i)+" ");
                    }catch(Exception e){
    
                    }
                }
            }while(c.moveToNext());
        }
    }
    

    【讨论】:

    • 一模一样...一直返回9个联系人...顺便说一句,代码是:= managedQuery(ContactsContract.Data.CONTENT_URI , null, ContactsContract.Data.MIMETYPE+"=? AND " +ContactsContract.CommonDataKinds.Email.TYPE+"=?", new String[]{ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE, ContactsContract.CommonDataKinds.Email.TYPE_HOME+""}, ContactsContract.Data.DISPLAY_NAME);
    • 所以我也会检查联系人的可见性(尽管这不重要,我只是好奇)。还要删除类型匹配,因为旧设备中的聚合可能没有正确关联类型并查看大小是否匹配。如果这是正确的,我将继续只显示结果.. 我写了一个非常幼稚的显示函数,用于调试
    • 它工作!现在我知道问题出在哪里了:ContactsContract.CommonDataKinds.Email.TYPE_HOME 问题是三星没有像 HTC 那样组织联系人,现在通过这个小改动解决了这个问题:ContactsContract.CommonDataKinds.Email.TYPE_OTHER 现在所有联系人都出现在所有手机中(Galaxy Ace 除外,但可能是因为它有奇怪的 rom...)谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    相关资源
    最近更新 更多