java - 将对象添加到 Inherited FirebaseMessagingService 继承服务 (FCM) 的类上的 Realm 数据库

标签 java android realm firebase-cloud-messaging

大家好,我在公共(public)构造函数(onMessageReceived)调用下面的方法(SaveMessage)FirebaseMessagingService用于将字符串保存在 Realm 中,但在从该表获取日期时收到通知后其为空

   public class FireBaseService extends FirebaseMessagingService {


    public static  int NOTIFICATION_ID = 1;
    Handler handler;
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
    generateNotification(remoteMessage.getNotification().getBody(),remoteMessage.getNotification().getTitle());

    SaveMessage(remoteMessage.getNotification().getBody());
    //AddList(remoteMessage.getData().get("message"));
    //StartActvity(Integer.valueOf(remoteMessage.getData().get("key_1")));

  }

 public void SaveMessage(final String message){


           Realm realm = Realm.getDefaultInstance();
               realm.executeTransactionAsync(new Realm.Transaction() {
                   @Override
                   public void execute(Realm realm) {
                       SimpleDateFormat simpleDateFormatTime = new SimpleDateFormat("HH:mm", Locale.getDefault());
                       String strTime = simpleDateFormatTime.format(new Date());
                       Number currentIdNum = realm.where(MessagePojo.class).max("id");

                       int nextId;
                       if (currentIdNum == null) {
                           nextId = 1;
                       } else {
                           nextId = currentIdNum.intValue() + 1;
                       }
                       MessagePojo messagePojo =  realm.createObject(MessagePojo.class,nextId);
                       messagePojo.setDate(strTime);
                       messagePojo.setMessage(message);
                       realm.insertOrUpdate(messagePojo); 
                       EventBus.getDefault().postSticky(true);
                       realm.close();
                   }
               });


}
}

我在一个 fragment 中为此 Realm 表添加了更改监听器。

感谢您的阅读。

最佳答案

最后我用处理程序和循环器解决了这个问题,并且 RealmChangeListener 工作完美:

public void SaveMessage(final String message){
handler = new Handler(Looper.getMainLooper());
    final Runnable runnable = new Runnable() {
        @Override
        public void run() {
            final Realm realm = Realm.getDefaultInstance();
            realm.executeTransactionAsync(new Realm.Transaction() {
                @Override
                public void execute(Realm realm) {
                    SimpleDateFormat simpleDateFormatTime = new SimpleDateFormat("YY/MM/dd HH:mm", Locale.getDefault());
                    String strTime = simpleDateFormatTime.format(new Date());
                    Number currentIdNum = realm.where(MessagePojo.class).max("id");
                    int nextId;
                    if (currentIdNum == null) {
                        nextId = 1;
                    } else {
                        nextId = currentIdNum.intValue() + 1;
                    }
                    MessagePojo messagePojo = realm.createObject(MessagePojo.class,nextId);
                    messagePojo.setDate(strTime);
                    messagePojo.setMessage(message);
                    realm.insertOrUpdate(messagePojo); // using insert AP
                   // EventBus.getDefault().postSticky(true);
                }},
                    new Realm.Transaction.OnSuccess() {
                        @Override
                        public void onSuccess() {
                            Log.e("service", "onSuccess: " );
                            realm.close();
                        }
                    },new Realm.Transaction.OnError() {
                     @Override
                      public void onError(Throwable error) {
                         Log.e("service", "onError: ",error );
                     }}
            );
           //handler.postDelayed(this, 500);

        }
    };
    handler.postDelayed(runnable, 500);
 }

关于java - 将对象添加到 Inherited FirebaseMessagingService 继承服务 (FCM) 的类上的 Realm 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49871631/

相关文章:

java - 简单的 Java "Service Provider frameworks"?

java - 使用 java 检查 Apache Velocity(.vm 文件)中的文本

java - 如何在javascript中将整数转换为int

java - NPE 使用 mockito 进行单元测试

Android 网页 View : HTML Content is Overlapping

android - Realm 配置管理

java - Android UTF-8编码引号

android - 无法找到自定义样式

Swift Realm 将预取对象保存到新对象中

java - recreate() 方法后迁移崩溃