内置联系人和数据库表不匹配时如何触发用户提示信息?[Android]

Posted

技术标签:

【中文标题】内置联系人和数据库表不匹配时如何触发用户提示信息?[Android]【英文标题】:How to trigger an alert message for user when there's no match with built-in contacts and database table?[Android] 【发布时间】:2012-08-30 18:58:48 【问题描述】:

我正在开发一个应用程序,其中我有一个从内置联系人列表中检索到的联系人姓名的 ListView。我使用 ContentProvider 从内置联系人列表中获取姓名。另外,我将 ListView 中的名称存储到我的数据库表中。

我需要将内置联系人列表与数据库表同步。因此,当内置的 ContactsContract 中的 DISPLAY_NAME 与我的表中的名称不匹配时,我需要为用户触发警报消息。而且,用户必须手动更改名称,而我必须更改表中的名称。 我怎么做?我需要这方面的帮助。

感谢您提供的任何帮助。任何示例和教程也将不胜感激。 谢谢!

更新

ContactsList.java - 这是从 android 手机的联系人中检索到的联系人的 ListView。

BuddyDBAdapter buddyDB = new BuddyDBAdapter(this);

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.contacts_list);

        ListView list = getListView();

        setListAdapter(new ArrayAdapter<String> (this, R.layout.contacts_list, R.id.contactName, buddiesList));

        Uri allContacts = Uri.parse("content://contacts/people");

        Cursor c = managedQuery(allContacts, null, null, null, null);

        String[] columns = new String[] ContactsContract.Contacts.DISPLAY_NAME;
        int[] views = new int[]  R.id.contactName;

        startManagingCursor(c);

        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.contacts_list, c, columns, views);
        this.setListAdapter(adapter);
    

    @Override
    public void onListItemClick(ListView l, View v, int position, long id)
    
        buddyDB.open();
        long name_id;
        super.onListItemClick(l, v, position, id);

        /*String action = getIntent().getAction();

        if(Intent.ACTION_VIEW.equals(action))
        
            //startActivity(intent);
        */

        //startActivityForResult(new Intent(Intent.ACTION_PICK),PICK_CONTACT);

        Cursor c = ((SimpleCursorAdapter)l.getAdapter()).getCursor();

        TextView contactName = (TextView) v.findViewById(R.id.contactName);
        String NameValue = contactName.getText().toString();

        name_id = buddyDB.insertNames(NameValue);


        Toast.makeText(getBaseContext(),
                "Selected: " + buddiesList[position], Toast.LENGTH_SHORT).show();


        buddyDB.close();

【问题讨论】:

您可以为此使用 AlertDialog。当您从数据库中检索并且当您没有进入contactList 时,只显示警报。 【参考方案1】:

当您向 sqlite 数据库或联系人表提供查询时,如果您的光标是 nullcursor.getCount() 不是 > 0 那么您可以显示警报数据库中不存在该联系人或数据的消息。

希望这会对你有所帮助。

并使用此代码来提醒视图:

final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("ALERT");
alertDialog.setMessage("NO DATA FOUND");
alertDialog.setIcon(R.drawable.warning);
alertDialog.setButton("OK",new DialogInterface.OnClickListener() 
    public void onClick(DialogInterface dialog, int which) 
        // DO YOUR STUFF ON CLICK OF OK
    
);
alertDialog.show();

【讨论】:

顺便说一下,我的代码有两个光标,我不确定cursor.getCount() is not &gt; 0 需要使用哪些光标。我将在上面发布我的代码。 您好,我想问您,我的代码是否正确,因为我不确定。它在 onCreate() 方法中:if(cursor.getCount()&gt;0) final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); alertDialog.setTitle("ALERT!"); alertDialog.setMessage("NO Name is Found! D:"); alertDialog.setIcon(R.drawable.warning); alertDialog.setButton("OK", new DialogInterface.OnClickListener() public void onClick(DialogInterface dialog, int which) ); alertDialog.show(); 我已经在 onCreate() 方法上方声明了光标 - Cursor cursor; 如果 cursor.getCount() > 0 那么你应该显示联系人或同步任何你想要的。当它为 如果有人给你时间回答你的问题,你应该对他们的回答做出回应,他们对你的问题有什么帮助。

以上是关于内置联系人和数据库表不匹配时如何触发用户提示信息?[Android]的主要内容,如果未能解决你的问题,请参考以下文章

匹配用户 Firestore 数据库模型

vue加载中loading提示信息(iView Spin)

想写个SQL触发器,同时插入两张,当一个表不符合条件时两张表都不让插入

从与帐户触发器关联的联系人的意图中提取联系人信息

QStyleItemDelegate 复选框与样式表不匹配

mysql提示table不存在:把数据库里的表都删了,用sql重新建表,怎么还提示表不存在呢?是在服务器上