gpt4 book ai didi

android - 联系人在数据库中多次保存

转载 作者:行者123 更新时间:2023-11-30 01:42:12 24 4
gpt4 key购买 nike

大家好,我有将数据添加到数据库的代码,该代码在 oncreate 上调用。但每次创建 fragment 时,它都会一次又一次地将数据保存到数据库中。我不想要那个。我怎样才能防止这是我获取数据并将其保存到数据库的代码。

public void getcontacts(){
Cursor phones;
phones = getActivity().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
while (phones.moveToNext()){
String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
DataBaseOperations hell = new DataBaseOperations(getActivity());
SQLiteDatabase db = hell.getWritableDatabase();
hell.SaveContacts(name, phoneNumber, db);
}
phones.close();
}

这里是保存在数据库中的代码。

public void SaveContacts(String Name,String phone,SQLiteDatabase db ){
ContentValues sv = new ContentValues();
sv.put(mDatabase.Tableinfo.Contacts_name, Name);
sv.put(mDatabase.Tableinfo.Contacts_phone, phone);
db.insert(mDatabase.Tableinfo.contacts, null, sv);
}

编辑 - 这是我到目前为止所做的,但我如何设置一个约束,它会发生冲突。我添加了一个自动递增主键作为唯一键,但它们将如何冲突?但它仍然在数据库中再次保存值。我在哪里设置主键作为约束?????

       public void SaveContacts(String Name,String phone,SQLiteDatabase db ){
ContentValues sv = new ContentValues();
sv.put(mDatabase.Tableinfo.Contacts_name, Name);
sv.put(mDatabase.Tableinfo.Contacts_phone, phone);
db.insertWithOnConflict(mDatabase.Tableinfo.contacts, null, sv, SQLiteDatabase.CONFLICT_REPLACE);

EDIT- 2 - 我如何在这种查询中创建唯一列???

    private static final String Contacts_Table = "CREATE TABLE "+
mDatabase.Tableinfo.contacts +"("
+mDatabase.Tableinfo.Contacts_name+" TEXT,"
+mDatabase.Tableinfo.Contacts_phone+" TEXT NOT NULL UNIQUE,"
+mDatabase.Tableinfo.isChattris+" TEXT,"
+mDatabase.Tableinfo.status_contact+" TEXT,"
+mDatabase.Tableinfo.Contact_pic+" BLOB"+")";

刚刚添加了 NOT NULL UNIQUE。这是约束条件。

最佳答案

  1. 将联系人的状态保存在不相关的存储中,例如 SharedPreferences .您不想依赖任何生命周期触发器,甚至 Application.onCreate 也不行,因为当应用程序启动时,它会一次又一次地发生。
  2. 尝试更新现有条目而不是添加新条目。确定数据库键应该是什么,然后你可以使用 insertWithOnConflictCONFLICT_REPLACE如果表中不存在则插入标记,如果存在则更新。

编辑:要定义约束以便触发冲突行为,请更改您的CREATE TABLE 语句。例如,这将导致重复的 (name,phone) 对触发它。不过,您可能想改用某种联系 ID。

CREATE TABLE mytable (
name TEXT,
phone TEXT,
UNIQUE(name, phone)
)

关于android - 联系人在数据库中多次保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34336590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com