Я использую шаблон MVVM в своем приложении и хочу сохранять сообщения в базе данных приложения при получении push-уведомления.
Сохранение данных работает нормально, если я использую AndroidViewModel
из Activity.
messageViewModel = ViewModelProviders.of(this).get(MessageViewModel.class);
messageViewModel.insert(messageReceived);
Здесь messageReceived
- это объект ROOM Entity, а messageViewModel
- это моя AndroidViewModel
Теперь та же самая функция insert
, которую я хочу использовать внутри моего NotificationReceiver.Я попытался инициализировать MessageRepository
внутри onReceive и использовал context
onReceive (контекстный контекст).
messageRepository = new MessageRepository(context);
messages = messageRepository.getAllMessages();
Это привело меня к ошибке android.content.context
не может быть применено к android.app.application
Я также пытался использовать контекст приложения из статического метода, например.App.getContext()
, но это не работает.
class App extends Application{
public static Application getApplication() {
return app;
}
}
, где app
- статическая переменная типа Application
, это прекрасно работает, когда приложение открыто, но когда приложение закрыто, это не работает.
app = App.this;
Моя AndroidViewModel:
public class MessageViewModel extends AndroidViewModel {
private MessageRepository messageRepository;
private LiveData<List<Message>> messages;
public MessageViewModel(@NonNull Application application) {
super(application);
messageRepository = new MessageRepository(application);
messages = messageRepository.getAllMessages();
}
public void insert(Message message) {
messageRepository.insert(message);
}
public void update(Message message) {
messageRepository.update(message);
}
public void delete(Message message) {
messageRepository.delete(message);
}
public void deleteAll() {
messageRepository.deleteAll();
}
public LiveData<List<Message>> getAll() {
return messages;
}
}
Ваша помощь будет оценена.