2016-10-11 11 views
0

Ich habe dagger2 in meinem Projekt verwendet, aber das Injektionsfeld ist immer Null. Hier ist der Code.dagger2 Inject Feld NullPointerException

Entschuldigung, mein Englisch ist arm. Vielen Dank im Voraus.

Modul

@Module 
public class RetrofitModule { 

    @Provides 
    @Singleton 
    Retrofit provideRetrofit() { 
     return new Retrofit.Builder().build(); 
    } 
} 

Komponente

@Component(modules = RetrofitModule.class) 
public interface RetrofitComponent { 

    void inject(Activity activity); 

} 

Und in MainActivity, schreibe ich diese

DaggerRetrofitComponent.builder().build().inject(this); 

Aber das Retrofit ist immer null. Wie kann ich es lösen?

+0

Wo nennt man 'inject()'? – Egor

+0

MainActivity - onCreate() –

+0

Es sieht auch so aus, als würden Sie vergessen, die Instanz von 'RetrofitModule' zu ​​übergeben, wenn Sie die Komponente erstellen, sollten Sie' .retrofitModule (new RetrofitModule()) 'aufrufen. – Egor

Antwort

1

Sie können diesen Weg nicht in Ihre Aktivitätsklasse injizieren!

Ihre Komponenten wie folgt ändern und den genauen Namen Ihrer Aktivität angeben:

@Component(modules = RetrofitModule.class) 
public interface RetrofitComponent { 

    void inject(MainActivity activity); 

} 

und dann haben Sie vielleicht auch Ihr Modul so oder irgendetwas anderes, die Ihren Bedarf passen ändern:

@Module 
public class RetrofitModule { 

    @Provides 
    Retrofit provideRetrofit() { 
     return new Retrofit.Builder().baseUrl("http://google.com").build(); 
    } 
} 

By the way, stellen Sie sicher, Sie haben @Inject in Ihrer Tätigkeit vor Retrofit Erklärung geschrieben:

@Inject 
Retrofit retrofit; 

Beachten Sie Folgendes: Wenn Sie Singleton in Ihrem Modul bereitstellen möchten, kann die ganze Komponente nicht geöffnet werden und sie muss mit @Singleton kommentiert werden.

Ich hoffe, es hilft :)

+0

Sorry, ich war vor ein paar Tagen beschäftigt. Ich versuche es gerade jetzt, es funktioniert. Vielen Dank. –

+0

Froh, das zu hören, vergessen Sie nicht, die Antwort mit grünen Check confirm zu bestätigen –

Verwandte Themen