2016-08-11 6 views
0

Dagger2とFirebaseを使いたいです。Google FirebaseとDagger-2は動作しません

background_crash E/FA:ワーカースレッドでタスク例外: java.lang.IllegalStateException:名前のFirebaseApp [DEFAULT] が存在しない は、残念ながら私は、次のエラーメッセージを取得しています。
W/DynamiteModule:ローカルモジュール記述子クラス com.google.firebase.authが見つかりません。

私はDagger2を使用しないとすべて正常に動作します。 ここで何が間違っていますか?手動でFirebaseAppを初期化する必要がありますか?ありがとう! は、ここに私のコードです:

// App extends Application 
@Override 
public void onCreate() { 
    super.onCreate(); 
    appComponent = DaggerAppComponent 
      .builder() 
      .appModule(new AppModule(this)) 
      .build(); 
    firebaseAnalytics = FirebaseAnalytics.getInstance(this); 
} 

...

// AppComponent.class 
@Provides 
@Singleton 
public FirebaseAuth provideFirebaseAuth() { 
    return FirebaseAuth.getInstance(); 
} 

...

@ActivityScope 
@Component(dependencies = AppComponent.class) 
public interface SignupComponent { 
    void inject(SignupActivity signupActivity); 
} 

...

@Inject 
public FirebaseAuth firebaseAuth; 

private SignupComponent signupComponent; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_signup); 
    ButterKnife.bind(this); 
    signupComponent = DaggerSignupComponent 
      .builder() 
      .appComponent(((App)getApplication()).getAppComponent()) 
      .build(); 
    signupComponent.inject(this); 
} 

@OnClick(R.id.sign_up_btn_sign_up) 
public void clickOnSignUp() { 
    String email = emailInput.getText().toString(); 
    String pass = passwordInput.getText().toString(); 

    if (!TextUtils.isEmpty(email) && !TextUtils.isEmpty(pass)) { 
     progressBar.setVisibility(View.VISIBLE); 
     firebaseAuth.createUserWithEmailAndPassword(email, pass) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
         progressBar.setVisibility(View.GONE); 
         if (task.isSuccessful()) { 
          Toast.makeText(SignupActivity.this, "yeppppa", Toast.LENGTH_SHORT).show(); 
         } 
        } 
       }); 
    } 
} 

Aaaand私のビルドファイル

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:24.1.1' 
    compile 'com.android.support:design:24.1.1' 
    compile 'com.android.support:cardview-v7:24.1.1' 
    compile 'com.android.support:recyclerview-v7:24.1.1' 

    compile 'com.google.firebase:firebase-core:9.4.0' 
    compile 'com.google.firebase:firebase-database:9.4.0' 
    compile 'com.google.firebase:firebase-storage:9.4.0' 
    compile 'com.google.firebase:firebase-crash:9.4.0' 
    compile 'com.google.firebase:firebase-auth:9.4.0' 

    compile 'com.google.dagger:dagger:2.6' 
    apt 'com.google.dagger:dagger-compiler:2.6' 

    compile 'com.jakewharton:butterknife:8.2.1' 
    apt 'com.jakewharton:butterknife-compiler:8.2.1' 
} 

apply plugin: 'com.google.gms.google-services' 
+0

あなたのアプリレベルのbuild.gradleファイルに、「compile 'com.google.firebase:firebase-auth:9.4.0'」を追加しましたか? –

+0

@KetanMehtaはいそうでした。私のポストを見てください。ビルドファイルを追加しました。 – Tobias

+0

firebase consoleでサインイン方式を有効にしましたか? @Tobias –

答えて

2

これは実際にダガーとは関係ありません。主なプロセスとクラッシュレポートが作成するプロセスの間で共有されるファイルやその他のリソースを扱うApplicationサブクラスの使用とともに、Firebaseクラッシュレポートの既知の問題と関係しています。 Androidがアプリケーションで使用するプロセスごとに新しいApplicationクラスを作成することはよくありませんが、あなたの場合、互いに矛盾する2つのDaggerグラフが効果的に存在します。

読むこのページの最後にある既知の問題について: https://firebase.google.com/docs/crash/android

最も簡単な解決策はfirebaseクラッシュ依存関係を削除するか、またはあなたのinitロジックではなく、アプリケーションのコンテンツプロバイダに移動のいずれかになります。アプリケーションの使用は、一般的にAndroidプラットフォームチームによって却下されます。

Firebaseクラッシュレポートがベータ版から出て、新しいプロセスを作成しなくなるまで待つこともできます。

+0

ありがとう!クラッシュの依存関係を削除しました(しかし、私は 'W/DynamiteModule:com.google.firebase.authのローカルモジュール記述子クラスが見つかりませんでした 'というメッセージを受け取りました)。私は、プロジェクトを再構築し、ビルドフォルダなどを削除します。はい、私はアプリケーションの使用は非常に良いではないことを知っているが、私は他のソリューションを見つけることができませんでした.."Daggerの使い方"のすべてのサンプルは、このApplicationクラスを使用しています...;) – Tobias

+0

そのメッセージは単なる警告です。正しく動作するものがない場合は、無視することができます。私の答えで述べたように、Applicationの代わりにContentProviderがあります。これらは、メインプロセスでのみ初期化されるため、競合状態や予期しない副作用がなくてもファイルにアクセスできるinitを実行するのが安全です。 –

0
wrong configured dagger-compiler: 

compile 'com.google.dagger:dagger-compiler:2.1' 

please modify project level ' build.gradle: 

buildscript 
{ 
    dependencies { 
     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 
    } 
} 
And then app level build.gradle: 

First, add plugin: 

apply plugin: 'com.neenbedankt.android-apt' 

And then modify the dependency to 

apt "com.google.dagger:dagger-compiler:2.1" 
+0

私はこのbevorをやった。私のgradスクリプトは正常に動作します。 同じエラーが発生します。 – Tobias

関連する問題