Необходимо инициализировать Fabric перед использованием singleton () при вызове Crashlytics.logException (ex); - PullRequest
0 голосов
/ 19 сентября 2019

Я очень старался найти решение этой проблемы.Я успешно реализовал Crashlytics в простом приложении, таком как приложение, содержащее простую кнопку для отображения текста.Я даже протестировал его в консоли Firebase , и он успешно регистрирует пользовательское исключение, используя следующую строку ..

Crashlytics.logException(new IOException("A dummy IOException"));

Я перешел по следующей ссылкедля реализации Crashlytics Официальное руководство по Crashlytics

И я могу видеть нефатальную ошибку, зарегистрированную в консоли Firebase, только через 5 минут в консоли.

Но когда приложениестало несколько сложным, например, когда я использовал библиотеку Firebase ML Vision для некоторых целей сканирования и кучу других библиотек, она начинала выдавать следующую ошибку каждый раз, когда выполняется код для ведения журнала Crashlytics.

`java.lang.IllegalStateException: Must Initialize Fabric before using singleton()
        at io.fabric.sdk.android.Fabric.singleton(Fabric.java:301)
        at io.fabric.sdk.android.Fabric.getKit(Fabric.java:551)
        at com.crashlytics.android.Crashlytics.getInstance(Crashlytics.java:191)
        at com.crashlytics.android.Crashlytics.checkInitialized(Crashlytics.java:390)
        at com.crashlytics.android.Crashlytics.logException(Crashlytics.java:210)
        at co.behtar.behtarinternal.MainActivity$1.onClick(MainActivity.java:29)
        at android.view.View.performClick(View.java:7341)
        at android.widget.TextView.performClick(TextView.java:14226)
        at android.view.View.performClickInternal(View.java:7307)
        at android.view.View.access$3200(View.java:846)
        at android.view.View$PerformClick.run(View.java:27796)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7156)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)`

Я не делалв этом случае нужно инициализировать Fabric , а Crashlytics в этом случае работает без особых усилий.Но в этом случае, когда некоторые библиотеки, которые я использовал, даже если я инициализировал Fabric несколькими способами внутри MainActivity и даже внутри класса Application, все равно выдает эту ошибку.

Я потратил около 3 дней на поиски решения и в ходе мероприятия даже создал учетную запись Fabric и интегрировал Fabric, используя свою страницу регистрации.Но все еще безуспешно с регистрацией Crash.

Я перешел по ссылке для реализации Fabric Официальный документ Fabric для Crashlytics

Кто-нибудь вокруг сталкивался с подобной проблемой, как моя??если да, то какие шаги вы предприняли, чтобы избавиться от него, чтобы Crashlytics заработал?

РЕДАКТИРОВАТЬ

Вот фрагмент кодагде я инициализирую Fabric, хотя это не требуется в Firebase Crashlytics, я попробовал это ..

public class App extends Application {
AppComponent appComponent;
private static Context context;

@Override
public void onCreate() {
    super.onCreate();
    Fresco.initialize(this);
    Fabric.with(this, new Crashlytics());
    if (BuildConfig.DEBUG) {
        Timber.plant(new Timber.DebugTree());
    }
    context = this;
    appComponent = DaggerAppComponent.builder().appModule(new AppModule(this)).utilsModule(new UtilsModule()).build();
}

public static Context getContext() {
    return context;
}

public AppComponent getAppComponent() {
    return appComponent;
}

}

А вот фрагмент кода, в котором я назвал Crashlytics.logException()

private void renderErrorResponse(Throwable error) {
    if (error instanceof HttpException) {
        ResponseBody responseBody = ((HttpException) error).response().errorBody();
        LoginErrorResponse loginErrorResponse;
        try {
            String responseString = null;
            if (responseBody != null) {
                responseString = responseBody.string();
            }
            if (Utils.isValidJson(responseString)) {
                responseString = Utils.toPrettyFormat(responseString);
                loginErrorResponse = gson.fromJson(responseString, LoginErrorResponse.class);
                Utils.logMessage("LoginError", responseString);
                Utils.showCustomToast(this, loginErrorResponse.getNon_field_errors().get(0));
            }
        } catch (IOException e) {
            Utils.logError("IOException", e);
        }
    } else {
        Utils.showCustomToast(this, this.getString(R.string.something_went_wrong));
        Crashlytics.logException(error);
    }

}

РЕДАКТИРОВАТЬ 2:

Эта ошибка возникает после добавления ключа API в манифест и изменения кода инициализации матрицы, как предложено @Romadro.

The Crashlytics build ID is missing. This occurs when Crashlytics tooling is absent from your app's build configuration. Please review Crashlytics onboarding instructions and ensure you have a valid Crashlytics account.

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Попробуйте это в вашем приложении

      Fabric.with(
              this,
              new Crashlytics.Builder().core(
                      new CrashlyticsCore.Builder()
                              .build()
              ).build();
      );
0 голосов
/ 19 сентября 2019

Поменяйте местами эти строки:

Fresco.initialize(this);
Fabric.with(this, new Crashlytics());

до:

Fabric.with(this, new Crashlytics());
Fresco.initialize(this);
...