2016-10-24 5 views
0

自分で再作成できませんでした。これはFabricによるCrashlyticsに現れたクラッシュです。これにダガー2のクラッシュ: "Nullable @Provides以外のメソッドからnullを返すことはできません"

行番号のポイント: App.getApp().getApplicationComponent().inject(this);

私が間違っているつもりだところ、私は見ることができません。

「App」は、テストするデバイスでマニフェストにあり、正常に動作しているApplicationクラスの拡張です。これは次のようなものです:

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どのようにしてクラスをnullにすることができますか?私はそれを実行し、 '@Nullable'で' @ Provides'メソッドをマークしようとしましたが、それは不平を言ってクラスがnullableでなければならないと言いました。私は '@ Nullable'でマークしましたが、何もしませんでした。 – Questioner

答えて

0

私はだけではなく、ヌルのデフォルトのオブジェクトを返すことで、同じ問題を修正しました。私のエラーは同じDaggerメッセージで始まりました。私は、注入されたクラスでnullを処理できると思った。他の依存関係の一部である可能性があるため、すべての依存関係をnull不可能にすることは大変意味があります。それは非常に基本的ですが、もちろんコーディング中は私はそれを考えませんでした。

@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; 
} 
関連する問題