android - 在 Firestore 更新上启动功能
问题描述
这个问题就像标题所暗示的那样简单。
多解释一点,我是 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 条相同的消息。在实现状态后,它只发送一个(如预期的那样),有时发送两个。
我想知道是否有可以替换 onStart() 的android方法,因为我认为问题在于方法本身。
我希望我已经很好地解释了自己。预先感谢任何愿意提供帮助的人
解决方案
根据您提到的内容,我建议您将代码放入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);
}
}
});
}
如果您查看有关生命周期的文档,您会发现 onStart 在您的活动生命周期内可能会被多次调用,这会将多个侦听器附加到mDocRef
引用。这可能是您接到多个电话的原因。
推荐阅读
- dart - 为什么最终变量允许更改其值?
- mysql - 更改 JUST MySQL 数据库字符集和排序规则(Rails 应用程序)
- javascript - 使用 Google Cloud Functions 从实时数据库中删除元素
- r - 从另一个矩阵中查找值
- r - 从r中的长刺中提取朋友ID
- ansible - 在ansible中的库存字符串之后在文件中附加一行?
- tabulator - 如何更改制表符分页按钮的文本和位置
- python-3.x - 问题酸洗函数的参数,包括使用 python pickle 模块的 datetime
- java - 将两个具有相同元素但不同数据的列表与所有数据合并到一个列表中?
- unity3d - 使用 Canvas 时 UiButton 的大小不正确