2016-10-24 3 views
0

Я не смог его воссоздать самостоятельно. Это крах, который появился в Crashlytics Fabric.Ошибка кинжала 2: «Невозможно вернуть null из метода @ @ Nrovable @Provides»

номер строки указывает на это: App.getApp().getApplicationComponent().inject(this);

Я не могу видеть, куда я иду неправильно.

«Приложение» - это расширение класса приложения, которое находится в манифесте и работает нормально на устройствах, на которых я тестирую. Это походит на это:

applicationComponent = DaggerApplicationComponent.builder() 
      .appModule(new AppModule(this)) 
... 
... 
      .netModule(new NetModule()) 
      .build(); 

Фрагмент Грохот в вопросе имеет зависимость помеченную аннотацию @Inject.

Вот полный трассировки стека:

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com....../com.....activities.MainActivity}: java.lang.NullPointerException: Cannot return null from a [email protected] @Provides method 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3254) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) 
    at android.app.ActivityThread.access$1100(ActivityThread.java:222) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:158) 
    at android.app.ActivityThread.main(ActivityThread.java:7229) 
    at java.lang.reflect.Method.invoke(Method.java) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
Caused by java.lang.NullPointerException: Cannot return null from a [email protected] @Provides method 
    at dagger.internal.Preconditions.checkNotNull(Preconditions.java:48) 
    at com.....di.modules....Module_Provides...Factory.get(...Module_Provides...Factory.java:30) 
    at com......di.modules....Module_Provides...Factory.get(...Module_Provides...Factory.java:10) 
    at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) 
    at com.....fragments.HomeFragment_MembersInjector.injectMembers(HomeFragment_MembersInjector.java:39) 
    at com.....fragments.HomeFragment_MembersInjector.injectMembers(HomeFragment_MembersInjector.java:9) 
    at com.....di.DaggerApplicationComponent.inject(DaggerApplicationComponent.java:217) 
    at com.....fragments.HomeFragment.onCreate(HomeFragment.java:87) 
    at android.support.v4.app.Fragment.performCreate(Fragment.java:2068) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1055) 
    at android.support.v4.app.BackStackRecord.setLastIn(BackStackRecord.java:838) 
    at android.support.v4.app.BackStackRecord.calculateFragments(BackStackRecord.java:878) 
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:719) 
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677) 
    at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388) 
    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:604) 
    at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:178) 
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1265) 
    at android.app.Activity.performStart(Activity.java:6915) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3217) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) 
    at android.app.ActivityThread.access$1100(ActivityThread.java:222) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:158) 
    at android.app.ActivityThread.main(ActivityThread.java:7229) 
    at java.lang.reflect.Method.invoke(Method.java) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
+0

Так что же вы пытаетесь ввести и является «нулевым»? – EpicPandaForce

+0

@EpicPandaForce Я не знаю. Трассировка стека не говорит и есть 2 зависимости, ни одна из которых не должна быть нулевой. Оба они исходят из базы данных Ormlite. – Questioner

+0

@EpicPandaForce Как сделать класс нулевым? Я попытался запустить его и пометить метод @ @ Provides '' @ Nullable', но он пожаловался и сказал, что класс должен быть нулевым. Я отметил его с помощью '@ Nullable' и ничего не сделал. – Questioner

ответ

0

Я просто установил такую ​​же проблему, возвращая объект по умолчанию, а не нулевой. Моя ошибка началась с того же сообщения кинжала. Я думал, что могу иметь дело с нулевым значением в классе, введенном. Имеет смысл сделать все зависимости не нольбежными, поскольку они могут быть частью других зависимостей. Это очень фундаментально, но, конечно, при кодировании я не думал об этом.

@Provides 
@Singleton 
public FavCountry provideFavoriteCountry(RealmProvider realmProvider){ 

    FavCountry country = realmProvider.getRealm().where(FavCountry.class).findFirst(); 

    //wait a minute, the table can be empty 
    if(country == null){ 
     country = new FavCountry(""); 
    } 

    return country; 
} 
Смежные вопросы