2016-10-11 4 views
0

Я использовал dagger2 в моем проекте, но поле инъекции всегда равно нулю. Вот код.dagger2 Inject field NullPointerException

Извините, мой английский плохой. Спасибо заранее.

Модуль

@Module 
public class RetrofitModule { 

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

Компонент

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

    void inject(Activity activity); 

} 

И в MainActivity, я пишу это

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

Но дооснащения всегда нуль. Как я могу это решить?

+0

Где вы звоните 'инъекционные()'? – Egor

+0

MainActivity - onCreate() –

+0

Также похоже, что вы забываете передать экземпляр 'RetrofitModule' при создании компонента, вы должны вызывать' .retrofitModule (новый RetrofitModule()) '. – Egor

ответ

1

Вы не можете вводить этот способ в свой класс активности!

изменить компонент, как это и указать точное название вашей деятельности:

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

    void inject(MainActivity activity); 

} 

, а затем, возможно, и вы должны изменить ваш модуль, как это или что-либо другое, которые соответствуют вашим потребностям:

@Module 
public class RetrofitModule { 

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

Кстати, убедитесь, что вы написали @Inject до объявления Retrofit в вашей деятельности:

@Inject 
Retrofit retrofit; 

обратите внимание на то, что: если вы хотите, чтобы в вашем модуле был предусмотрен синглтон, весь компонент не может оставаться остановленным, и его необходимо аннотировать @Singleton.

Я надеюсь, что это помогает :)

+0

Извините, я был занят несколько дней назад. Я пробую это сейчас, это работает. Большое спасибо. –

+0

Рад это слышать, не забудьте подтвердить ответ, используя зеленую проверку ✅ –

Смежные вопросы