我想从Firebase实时数据库中连续检索数据。我已经为此目的提供了服务,但是该服务不会停止调用stopService
。当我得到适当的数据时,我想停止服务。请帮忙。
我尝试了
Intent intent = new Intent(MainActivity.this,BackgroundSoundService.class);
stopService(intent);
但这没有用。我还需要做什么来停止此服务?
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
IniTializeSpeech(getApplicationContext());
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("objectsData").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String ss =(String) dataSnapshot.getValue();
Log.i("OnDataChange",ss);
t1.speak(dataSnapshot.getValue().toString(), TextToSpeech.QUEUE_FLUSH, null);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
return Service.START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
}
答案 0 :(得分:0)
如果您只想一次获取数据,则可以使用addListenerForSingleValueEvent
:
mDatabase.child("objectsData").addListenerForSingleValueEvent(...
如果情况更复杂,则可以使用当前代码进行注册。但是要稍后阻止事件监听器响应数据更改,您需要remove that listener。
为此,请在注册侦听器时首先保留对其的引用:
ValueEventListener myListener = mDatabase.child("objectsData").addValueEventListener(...
然后您可以通过以下方式将其删除:
mDatabase.child("objectsData").removeEventListener(myListener)