【问题标题】:Contact content provider observer not working stable in android联系内容提供者观察者在 android 中无法稳定工作
【发布时间】:2020-01-31 15:05:00
【问题描述】:

我正在使用内容提供者获取所有联系人,并使用联系人观察器检查此联系人何时更改,但效果不佳

 @Override
    public void onChange(boolean selfChange, Uri uri) {
        super.onChange(selfChange, uri);

        Log.e("MAS_CHECK", uri + "");
        deliverSelfNotifications();

        dataBaseAdapter = new DataBaseAdapter(context);
        preferences = context.getSharedPreferences("Dtmf app", Context.MODE_PRIVATE);
        editor = preferences.edit();
        counter = counter + 1;
        boolean ExitFromApp = preferences.getBoolean("ExitFromApp", false);
        if (counter == 1) {
            Log.e("OTD_CHANGE", "there is change");
            if (!ExitFromApp) {
                final Thread thread = new Thread() {
                    @Override
                    public void run() {
                        Log.e("OTD_CHANGE", "Waiting update to be stable");
                        try {
                            sleep(60000);
                            Log.e("OTD_CHANGE", "update start .. loading new data");
                            if (dataBaseAdapter.DeletAllItem()) {
                                ToolsUtils.GetContacts(context);
                            }

                            //--------------------------to restart app ----------------
                            editor.putBoolean("OTD_CHANGE", true);
                            editor.commit();
                            counter = 0;
                            Log.e("OTD_CHANGE", "update finish");
                            Intent i = new Intent(context, MainActivity.class);
                            i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                            context.startActivity(i);

                            //-----------------------------------------------------------------
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                };
                thread.start();


            } else if (ExitFromApp) {
                counter = 0;
                editor.putBoolean("THERE_IS_UPDATE", true);
                editor.commit();
            }


        }

    }

**所以我怎样才能让它每次都能稳定工作,这就是代码 当检测到更改时,它应该删除数据库中的旧联系人,然后重新添加新数据**

【问题讨论】:

  • but it not working good - 您需要指定更多信息才能获得帮助,究竟是什么不起作用?您发布的代码也是一个非常通用的 ContentObserver,请显示您的代码
  • 变化很大的时候是不行的,比如换了号码、照片和名字就不行了
  • 或者您可以控制ContactsContract.RawContacts.VERSION 列。

标签: android android-contacts


【解决方案1】:

检查您的代码,您的 counter 字段似乎有问题,不确定它的行为是否符合您的预期。

我建议从onChange 回调中删除所有代码,然后添加一个日志,以便您可以手动检查数据库更改何时以及如何调用它。

一旦你更好地理解了它的工作原理,并且可以开始恢复你的代码,我建议不要使用 counter == 1 行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2012-04-03
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    相关资源
    最近更新 更多