setPersistenceEnabled (true) вылетает приложение при вызове из BroadcastReceiver - PullRequest
0 голосов
/ 11 мая 2018

Я использую это решение:

public class FirebaseUtil {
    private static FirebaseDatabase mDatabase;

    public static FirebaseDatabase getDatabase() {
        if (mDatabase == null) {
            mDatabase = FirebaseDatabase.getInstance();
            mDatabase.setPersistenceEnabled(true);
        }
        return mDatabase;
    }
}

Мой класс приложения:

public class AnalyticsApplication extends Application { 
  private static GoogleAnalytics sAnalytics; 
  private static Tracker sTracker; 

  @Override public void onCreate() { 
    super.onCreate(); 
    sAnalytics = GoogleAnalytics.getInstance(this); 
  } 

  synchronized public Tracker getDefaultTracker() { 
    if (sTracker == null) { 
      sTracker = sAnalytics.newTracker(R.xml.global_tracker); 
    } 
    return sTracker; 
  } 
}

У меня есть уведомления, которые вносят изменения в базу данных. Уведомления вызываются из BroadcastReceiver.

Проблема в том, что при вызове getDatabase () из приложения он работает нормально, но при вызове из уведомления (из другого потока) происходит сбой. Когда я комментирую mDatabase.setPersistenceEnabled(true);, он работает нормально.

Почему это происходит и я могу это исправить?

UPDATE:

Вот исключение:

java.lang.RuntimeException: 

at android.app.ActivityThread.handleReceiver (ActivityThread.java:3047)

at android.app.ActivityThread.-wrap18 (ActivityThread.java)

at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1561)

at android.os.Handler.dispatchMessage (Handler.java:102)

at android.os.Looper.loop (Looper.java:154)

at android.app.ActivityThread.main (ActivityThread.java:6119)

at java.lang.reflect.Method.invoke (Native Method)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:886)

at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776)
Caused by: java.lang.NullPointerException: 

at     com.mycarservice.mycarservice.utils.DocumentDatabaseHandlerRemote.updateDocument (DocumentDatabaseHandlerRemote.java:48)

at com.mycarservice.mycarservice.utils.NotificationUtils.sendNotification (NotificationUtils.java:43)

at com.mycarservice.mycarservice.utils.DocumentReceiver.onReceive (DocumentReceiver.java:35)

at android.app.ActivityThread.handleReceiver (ActivityThread.java:3040)

Идея состоит в том, что я обновляю документы при получении уведомления - в DocumentReceiver.onReceive (BroadcastReceiver) я звоню sendNotification(), что вызывает updateDocument().

1 Ответ

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

mDatabase.setPersistenceEnabled (true);

получая сбой, потому что вы должны инициализировать firebase на уровне приложения

public class MApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);
    }
}

в manifest.xml:

<application
    android:name=".MApplication"/>

Надеюсь, это поможет вам !!

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