Запуск функции в обновлении Firestore - PullRequest
0 голосов
/ 15 мая 2018

Вопрос так же прост, как и заголовок sugests.

Чтобы объяснить немного больше, я начинающий в программировании Android, и мне нужно, чтобы мое приложение запускало определенную функцию каждый раз, когда обновляется мой firestore.

protected void onStart(){
    super.onStart();
    mDocRef.addSnapshotListener(new EventListener<DocumentSnapshot>() {
        @Override
        public void onEvent(DocumentSnapshot documentSnapshot, FirebaseFirestoreException e) {
                Map<String,Object> SMSFlag = new HashMap<String, Object>();
                String quotenum = documentSnapshot.getString(NUM_KEY);
                String quotemsg = documentSnapshot.getString(SMS_KEY);

                state = documentSnapshot.getString(STATE_KEY);
                if (state.equals("tosend")) {
                    try {
                        SmsManager smsManager = SmsManager.getDefault();
                        smsManager.sendTextMessage(quotenum, null, quotemsg, null, null);
                        Toast.makeText(MainActivity.this, "SMS Sent!", Toast.LENGTH_LONG).show();
                    } catch (Exception e1) {
                        Toast.makeText(MainActivity.this, "Error sending SMS: " + e, Toast.LENGTH_LONG).show();
                    }
                    SMSFlag.put(STATE_KEY, "sent");
                    mDocRef.set(SMSFlag);
                    state = documentSnapshot.getString(STATE_KEY);
                }
        }
    });
}

Это должно отправить сообщение.Как вы можете видеть в коде, я использую ключ состояния, потому что он отправлял 3, а иногда 4 идентичных сообщения.После реализации состояния он отправляет только один (как и ожидалось), а иногда и два.

Я хочу знать, есть ли метод Android, для которого я могу заменить onStart (), потому что я думаю, что проблема заключается вСам метод.

Надеюсь, я хорошо объяснил.Заранее благодарю всех, кто хочет помочь

1 Ответ

0 голосов
/ 15 мая 2018

По тому, что вы упомянули, я рекомендую вам поместить свой код в метод обратного вызова жизненного цикла onCreate:

protected void onCreate(){
    super.onCreate();
    mDocRef.addSnapshotListener(new EventListener<DocumentSnapshot>() {
        @Override
        public void onEvent(DocumentSnapshot documentSnapshot, FirebaseFirestoreException e) {
                Map<String,Object> SMSFlag = new HashMap<String, Object>();
                String quotenum = documentSnapshot.getString(NUM_KEY);
                String quotemsg = documentSnapshot.getString(SMS_KEY);

                state = documentSnapshot.getString(STATE_KEY);
                if (state.equals("tosend")) {
                    try {
                        SmsManager smsManager = SmsManager.getDefault();
                        smsManager.sendTextMessage(quotenum, null, quotemsg, null, null);
                        Toast.makeText(MainActivity.this, "SMS Sent!", Toast.LENGTH_LONG).show();
                    } catch (Exception e1) {
                        Toast.makeText(MainActivity.this, "Error sending SMS: " + e, Toast.LENGTH_LONG).show();
                    }
                    SMSFlag.put(STATE_KEY, "sent");
                    mDocRef.set(SMSFlag);
                    state = documentSnapshot.getString(STATE_KEY);
                }
        }
    });
}

Если вы отметите docs на жизненных циклах, вы увидите, что onStart может вызываться несколько раз в течение жизненного цикла вашей деятельности, что приведет к привязке нескольких слушателей к ссылке mDocRef. Это может быть причиной, по которой вы получали несколько звонков.

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