Здесь я пытаюсь сохранить данные в базе данных sqlite из базы данных firebase, и они успешно сохранены. И база данных Sqlite регулярно обновляется при добавлении новых данных. Но проблема в том, что новые данные появляются только при возобновлении активности. Recyclerview не обновляется, пока не вернется к активности. Вот мой класс обслуживания.
public class NetworkBroadcast extends Service
{
public int onStartCommand(Intent intent, int flags, int startId)
{
FirebaseAuth mAuth=FirebaseAuth.getInstance();
checkNewMessage(mAuth);
}
private void checkNewMessage(final FirebaseAuth mAuth)
{
final String CurrentUID=mAuth.getCurrentUser().getUid();
final DatabaseReference MessageRef= FirebaseDatabase.getInstance().getReference().child("Messages").child(CurrentUID);
final DatabaseReference MessageSenderRef= FirebaseDatabase.getInstance().getReference().child("Messages");
MessageRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s)
{
final String SenderKey=dataSnapshot.getKey();
Log.i("SERVER_MESSAGE",SenderKey);
final MyDbHandler myDbHandler=new MyDbHandler(NetworkBroadcast.this,SenderKey+".db",null,1);
final MessagesAdapter messagesAdapter=new MessagesAdapter(myDbHandler.sqlMessagesList(),NetworkBroadcast.this,SenderKey,myDbHandler);
MessageRef.child(SenderKey).addChildEventListener(new ChildEventListener()
{
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s)
{
Messages messages=dataSnapshot.getValue(Messages.class);
String pushKey=dataSnapshot.getKey();
checkDatabaseHasMessageOrNotWithStatus(messages,pushKey,messagesAdapter,myDbHandler);
checkMessageStatus(messages,CurrentUID,SenderKey,myDbHandler);
chnageSenderMessageStatus(messages,CurrentUID,MessageSenderRef);
messagesAdapter.updateData(myDbHandler.sqlMessagesList());
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s)
{
Messages statusmessage=dataSnapshot.getValue(Messages.class);
String key=dataSnapshot.getKey();
boolean update=myDbHandler.upDateDataBaseForStatus(statusmessage.getStatus(),key);
if (update=true)
{
Log.i("SERVER_MESSAGE","my message is update");
}
}
});
}
});
}
}
, а конструктор класса адаптера -
public MessagesAdapter(List<SqlMessages> userMessagesList, Context mContext, String messageReceiverId, MyDbHandler myDbHandler)
{
this.userMessagesList = userMessagesList;
this.mContext = mContext;
ReceiverID=messageReceiverId;
this. myDbHandler=myDbHandler;
}
public void updateData(List<SqlMessages> sqlMessages)
{
this.userMessagesList=sqlMessages;
notifyDataSetChanged();
}