Как обновить базу данных? - PullRequest
0 голосов
/ 02 мая 2018

У меня есть приложение, которое принимает push-уведомления. Я должен написать push-уведомления в базу данных. Проблема в том, что в базе данных он пишет только последнее сообщение (после повторного входа в приложение) и когда приложение находится в фоновом режиме и когда на переднем плане. Что можно сделать, чтобы поддерживать актуальность базы данных при поступлении новых данных?

Я принимаю push, после чего записываю его данные в переменные

      [Service]

   [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
    public class MyFirebaseMessagingService : FirebaseMessagingService
    {

        const string TAG = "MyFirebaseMsgService";

        public override void HandleIntent(Intent intent)
        {
            try
            {
                if (intent.Extras != null)
                {
                    var builder = new RemoteMessage.Builder("MyFirebaseMessagingService");

                    foreach (string key in intent.Extras.KeySet())
                    {
                        builder.AddData(key, intent.Extras.Get(key).ToString());
                    }

                    this.OnMessageReceived(builder.Build());
                }
                else
                {
                    base.HandleIntent(intent);

                }
            }
            catch (Exception)
            {
                base.HandleIntent(intent);
            }
        }

        public override void OnMessageReceived(RemoteMessage message)
        {

            Log.Debug(TAG, "From: " + message.From);
            Log.Debug(TAG, "Notification Message Body: " + message.GetNotification().Body);
            SendNotification(message.GetNotification().Body, message.Data, message.GetNotification().Title);
           // Here I write the push - notification data into variables
            X.Instance.title = message.GetNotification().Title;
            X.Instance.body = message.GetNotification().Body;

        }

        private void OnStartCommand()
        {
            throw new NotImplementedException();
        }

        public class X
        {

            public static X Instance = new X();

            public  string title;
            public string body;
        }

Здесь, в этом классе я заполняю базу данных:

[Service]
[Activity(Label = "Message")]
public class FormMessageActivity : Activity
{
    ListView lstData;
    List<Message> lstSource = new List<Message>();
     DataBase db;


    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.FormMessage);
        db = new DataBase();
        db.CreateDataBase();
        lstData = FindViewById<ListView>(Resource.Id.listView);
        Message message = new Message()
        {
            //And here I add to the database
            Some = MyFirebaseMessagingService.X.Instance.title,
            Notification = MyFirebaseMessagingService.X.Instance.body
        };
        if (message.Notification != null)
        {
            db.InsertIntoTableMessage(message);
            LoadData();
        }

        LoadData();
        lstData.ItemClick += (s, e) =>
        {
            //Set background for selected item
            for (int i = 0; i < lstData.Count; i++)
            {
                if (e.Position == i) StartActivity(typeof(MessageActivity));

            }
        };
    }
   public void LoadData()
    {
        lstSource = db.SelectTableMessage();
        var adapter = new ListViewAdapter(this, lstSource);
        lstData.Adapter = adapter;
    }
}

1 Ответ

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

Из вашего кода создается впечатление, что вы создаете экземпляр БД в onCreate и вводите данные одним и тем же методом onCreate. Я не вижу, как реализована ваша база данных или что это за база данных, но я бы посоветовал вам ввести свое уведомление в базу данных в обработчике OnMessageReceived, который вызывается каждый раз, когда вы получаете новое уведомление, а не в вашем onCreate, потому что onCreate вызывается экономно и из-за определенных конфигураций устройства, таких как изменение ориентации.

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