Контактный контент-провайдер не работает стабильно android - PullRequest
0 голосов
/ 31 января 2020

Я использую контент-провайдера, чтобы получить все контакты, и использую наблюдателя контактов, чтобы проверить, когда этот контакт изменился, но он не работает нормально

 @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();
            }


        }

    }

**, так как я может заставить его работать каждый раз и стабильно, это код, когда обнаружены изменения, он должен удалить старый контакт в базе данных, затем повторно добавить новые данные **

1 Ответ

0 голосов
/ 05 февраля 2020

проверяя ваш код, кажется, что может быть проблема с вашим полем counter, не уверен, что он ведет себя так, как вы ожидаете.

Я бы предложил удалить весь ваш код из обратного вызова onChange и просто добавьте журнал, чтобы вы могли проверить, когда и как он вызывается при изменении базы данных вручную.

Как только вы лучше поймете, как это работает, и сможете начать восстанавливать свой код, я бы предложил не использовать эту строку counter == 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...