我通过名字获取Android联系人的函数是否应该返回光标或其他东西?

我通过名字获取Android联系人的函数是否应该返回光标或其他东西?,android,Android,我正在开发一个类,该类可以处理用户的Android联系人,并与SQL数据库交互,您可以将手机的联系人移动到该数据库(数据库中的信息将显示为ListView)。我已经做了一个函数,应该通过名字检索Android联系人,并返回该联系人的所有信息。我的职能如下: public Cursor getContactByName(String name) { Uri uri = ContactsContract.Data.CONTENT_URI; String[] projection =

我正在开发一个类,该类可以处理用户的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);
}

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

就我个人而言,我更喜欢创建一个对象
联系人
。因此,您更加灵活,还可以在这个类(或相关DAO)中实现与对象相关的函数。
将值作为
Cursor
或甚至作为
String
传递会给您带来更多麻烦。在对象中,您可以准确地看到所有内容的propertynames,使用光标,您必须知道相应字段的名称或位置,在字符串中,您甚至必须解析结果

编辑:
正如@DavidCowden所言,这在很大程度上取决于你试图实现的目标。所以我的猜测是,您希望加载数据并将其显示在某处。

如前所述,在本例中,我更喜欢一个单独的类,因为它更干净、更易于维护。

这取决于您将使用数据做什么。如果您要将它添加到另一个数据库(如您的问题所示),您最好将它作为一个游标,只需在第二个数据库中输入该游标即可。如果您喜欢将数据库行映射到对象,那么就这样做。请记住,对象关系映射需要更多的内存和周期,但通常会产生更清晰的代码。这真的取决于作为程序员的您(抱歉,我知道这不是您想要听到的)。

好的,这回答了我的问题。谢谢尽管如此,以这种方式存储游标并没有问题,对吗?我可以从数据库中抓取光标并从中获取信息,就像我在创建后仍在处理它一样?我对Android开发还很陌生,所以使用游标仍然有点混乱。@Cheddar你过去不得不担心关闭游标,但是我认为这并不是一个问题,因为游标是自己管理的。只要确保在完成db连接后关闭它,就可以了。虽然使用对象会更干净,但我有点担心它会占用更多内存。我和这个项目一起工作的一个人做了一个SMS数据库,并将SMSE作为对象返回,但他的XML页面运行得不太顺畅。显然,SMSE的数量会比contacts多,但在将contacts作为对象返回时,内存会是一个需要担心的问题吗?在您的情况下,我不会担心内存。通过执行一些数据库查询来读取联系人,不需要进行昂贵的计算。如果我没听错的话,你只读了一个contat?我真的认为使用游标要困难得多。@Cheddar是的,正如OblTobl所建议的,内存不应该是个问题。同样,现在就选择最干净的,如果需要,以后再优化。