Исключение нулевого указателя для Dagger-2 (android)

Подробности

Исключение нулевого указателя в классе UseContex при использовании метода printToast () класса UseContex. Класс UseContex расширяет mainActivity. Если я печатаю тост в MainActivity, то он не содержит нулевого указателя на объект контекста, но то же самое, что и в UseContex, чем он показывает null исключение указателя.

AppComponent

@Singleton @Component(modules = {AppModule.class})
public interface AppComponent {
void inject(DaggerApplication daggerApplication);
void inject(MainActivity mainActivity);

}

AppModule

@Module
public class AppModule {
private final DaggerApplication application;
public AppModule(DaggerApplication application) {
    this.application = application;
}
@Singleton
@Provides
Context providesApplicationContext(){
    return  application;
}
@Singleton
@Provides
UseContex provideUsecontex(){
  return new UseContex();
}
}

UseContex

public class UseContex extends MainActivity{
public  void printToast(){
Log.e("User dao impl","Hello user dao");
Toast.makeText(context, "helo", Toast.LENGTH_SHORT).show();
}
}

Основная деятельность

public class MainActivity extends AppCompatActivity {
@Inject
UseContex useContex;
@Inject
public Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);    
((DaggerApplication)getApplication()).getAppComponent().inject(this);
     useContex.printToast();
}
}

Кинжал

public class DaggerApplication extends Application {
AppComponent appComponent;
@Override
public void onCreate() {
    super.onCreate();
    appComponent = DaggerAppComponent.builder().appModule(new 
AppModule(this)).build();
    appComponent.inject(this);

}
public AppComponent getAppComponent(){return  appComponent;}

}

person Mac New    schedule 17.06.2017    source источник


Ответы (2)


Dagger не вводит ваш UseContex подкласс, потому что AppComponent не @provide a UseContex. AppComponent - это всего лишь @providing a MainActivity, а вы передаете UseContex в качестве его полиморфного базового класса и надеетесь, что это сработает. Вместо этого @provide a UseContex в вашем AppComponent, и Dagger вставит поля вашего базового класса.

person It's Your App LLC    schedule 17.06.2017
comment
если я использую @provide UseContex в моем AppComponent, чем он показывает ошибку - person Mac New; 17.06.2017
comment
Ага, вам нужно будет добавить метод @Provide в AppComponent, который возвращает UseContex - person It's Your App LLC; 17.06.2017
comment
Спасибо за лучший ответ. Не могли бы вы попробовать мой ответ и в своем другом вопросе? - person It's Your App LLC; 17.06.2017

Он показывает нулевой указатель, потому что контекст не определен в классе UseContex. Вы должны использовать "getApplicationContext" вместо "context" в этой строке.

Toast.makeText(context, "helo", Toast.LENGTH_SHORT).show();

замена

Toast.makeText(getApplicationContext, "helo", Toast.LENGTH_SHORT).show();
person Kamal Bunkar    schedule 19.06.2017