Dagger2 выдает ошибку приведения гд что не так?

192
28 апреля 2018, 19:35

Хочу получить Receiver . делаю следующие шаги но прога падает

public class MvpApp  extends Application{
    private ApplicationComponent mApplicationComponent;
    @Override
    public void onCreate() {
        super.onCreate();
        mApplicationComponent = DaggerApplicationComponent.builder()
                .applicationModule(new ApplicationModule(this)).build();
        mApplicationComponent.inject(this);
    }
    public ApplicationComponent getmApplicationComponent() {
        return mApplicationComponent;
    }
}

вот модуль

@Module
public class ApplicationModule {
    private final Application mApplication;
  public ApplicationModule(Application mApplication){
        this.mApplication = mApplication;
    }
    @Provides
    @ApplicationContext
    Context provideContext() {
        return mApplication;
    }
    @Provides
    Application provideApplication() {
        return mApplication;
    }

    @Provides
    BluetoothConnectionStateRepository provideBluetoothConnectionStateRepository(BluetoothConnectionStateModel bluetoothConnectionStateModel){
      return new BluetoothConnectionStateRepositoryImpl(bluetoothConnectionStateModel);
    }

    @Provides
    BluetoothConnectionStateModel provideBluetoothConnectionStateModel(){
      return new BluetoothConnectionStateModel();
    }

  @Provides
  BluetoothConnectionStateReceiver provideBluetoothConnectionStateReceiver(){
    return new BluetoothConnectionStateReceiver();
  }

}

компонент

@Singleton
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {
    void inject(MvpApp app);
    void inject(BluetoothConnectionStateReceiver bluetoothConnectionStateReceiver);

    @ApplicationContext
    Context context();
    Application application();

    BluetoothConnectionStateRepository repository();
    BluetoothConnectionStateModel model();
    BluetoothConnectionStateReceiver receiver();
}

Вот и cсам Receiver падает там где делаетсся ((MvpApp)context).getmApplicationComponent().inject(this); пишет не могу привести тип

public class BluetoothConnectionStateReceiver extends BroadcastReceiver{
    @Inject
    BluetoothConnectionStateRepository mBluetoothConnectionStateRepository;

    @Override
    public void onReceive(Context context, Intent intent) {
        ((MvpApp)context).getmApplicationComponent().inject(this);
        String action = intent.getAction();
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        // When discovery finds a device
        if (action.equals(mBluetoothAdapter.ACTION_STATE_CHANGED)) {
            final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, mBluetoothAdapter.ERROR);
            switch(state){
                case BluetoothAdapter.STATE_OFF:
                    mBluetoothConnectionStateRepository.changeConnectionState(false);
                    break;
                case BluetoothAdapter.STATE_TURNING_OFF:
                    break;
                case BluetoothAdapter.STATE_ON:
                 mBluetoothConnectionStateRepository.changeConnectionState(true);
                    break;
                case BluetoothAdapter.STATE_TURNING_ON:
                    break;
            }
        }
    }
}
Answer 1

Не каждый контекст == Application.

Сначала необходимо из контекста получить application context, а потом уже приводить к Application.

((MvpApp)context.getApplicationContext()).getmApplicationComponent().inject(this);
READ ALSO
Cannot resolve method 'setContentView' Cannot resolve method 'getSupportFragmentManager'

Cannot resolve method 'setContentView' Cannot resolve method 'getSupportFragmentManager'

В общем ,решил внедрить в приложение google карты через фрагменты,в конченом итоге получил 2 ошибки:"Cannot resolve method 'setContentView' Cannot resolve method 'getSupportFragmentManager'",не...

352
Считать строку, используя стримы

Считать строку, используя стримы

Есть такой файл с такими строками:

200
Отсутствует SDK для java и ошибка “the select directory is not a valid home for JDK”

Отсутствует SDK для java и ошибка “the select directory is not a valid home for JDK”

Установил intellij idea 20172, но при создании проекта в поле "Project SDK" значится надпись "No SDK"

204
Как сортировать полученные из postgesql данные

Как сортировать полученные из postgesql данные

Есть база данных postgresql, есть java класс который показывает все данные, как сортировать как чтобы, раньше показанные данные повторно не показывались,...

182