0

我正在研究一个应该处理用户的 Android 联系人并与 SQL 数据库交互的类,您可以将手机的联系人移动到其中(数据库中的信息将显示为 ListView)。我制作了一个函数,该函数应该按名称检索 Android 联系人并返回该联系人的所有信息。我的功能如下:

public Cursor getContactByName(String name)
{
    Uri uri = ContactsContract.Data.CONTENT_URI;
    String[] projection = null;
    String selection = Data.DISPLAY_NAME + "=?";
    String[] selectionArgs = new String[]{name};
    String sortOrder = null;

    return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}

所以想法是这将被另一个函数调用,它首先检查联系人是否存在。此函数将返回一个仅包含该联系人信息的游标。首先,我想知道我是否正确返回包含联系人信息的光标,还是应该创建一个存储此信息的类并返回该类的对象?或者我应该返回一个字符串?请记住,我要返回的是我打算移动到我的数据库中的联系人,我觉得返回 Cursor 不是我的目标。作为一个附带问题,是否有任何理由使用 ContentResolver.query 而不是 managedQuery 来达到我的目的?

4

2 回答 2

0

我个人更愿意创建一个对象Contact。所以你更灵活,你也可以在这个类(或相关的DAO)中实现与你的对象相关的功能。
传递值 asCursor甚至 asString会给你带来更多麻烦。在一个对象中,您可以准确地看到所有内容的属性名称,使用光标您必须知道相应字段的名称或位置,在字符串中您甚至必须解析结果。

编辑:
正如@DavidCowden 所提到的,这在很大程度上取决于您要实现的目标。所以我的猜测是,您想加载数据并将其显示在某个地方。
正如已经提到的,在这种情况下,我更喜欢单独的类,因为它更清洁和可维护。

于 2013-04-15T06:53:45.483 回答
0

这取决于您将使用这些数据的目的。如果您要将它添加到另一个数据库(正如您的问题所暗示的那样),您可能最好将其保留为游标并简单地将该游标输入到您的第二个数据库中。如果您喜欢将数据库行映射到对象,请执行此操作。请记住,对象关系映射需要更多的内存和周期,但通常会产生更清晰的代码。作为程序员,这完全取决于你(抱歉,我知道这不是你想听到的)。

于 2013-04-15T06:53:54.060 回答