Dagger крашится если использую @Named

155
23 февраля 2018, 17:56

Если удалить @Named, все работает. Но мне нужно Named

Module

@Module
public class ServerServiceModule {
ServerService mService;
public ServerServiceModule(ServerService service) {
    this.mService = service;
}
@Provides
AddLogViewModel getAddLogViewModel() {
    return new AddLogViewModel(mService.getApplication());
}
@ElementsIntoSet
@Named("area")
@Provides
Set<String> getDebugArea() {
    return new HashSet<>(Arrays.asList(mService.getResources().getStringArray(R.array.debugArea)));
}
@ElementsIntoSet
@Named("type")
@Provides
Set<String> getDebugType() {
    return new HashSet<>(Arrays.asList(mService.getResources().getStringArray(R.array.debugType)));
}

Activity

public class ServerService extends LifecycleService {
@Inject @Named("area") Set<String> mDebugArea;
// @Inject @Named("type") Set<String> mDebugType;
@Inject AddLogViewModel mViewModel;
@Override
public void onCreate() {
    DaggerServerServiceComponent
            .builder()
            .serverServiceModule(new ServerServiceModule(this))
            .build().stringsDebug();
            //code..
            super.onCreate();
}

Component

@Component(modules = ServerServiceModule.class)
public interface ServerServiceComponent {
    Set<String> stringsDebug();
}

Crash

Answer 1

Проблема решена так: @Named("...") является ключом-идентификатором для @Inject Но, как оказалось, Если у меня 2 метода возвращают одинаковый тип, необходимо 1 метод пометить маркером @Named, а второй НЕ НАДО!

Соответственно, если 4 одинаковых метода, 3 помечаем, 1 оставляем без аннотации.

 @ElementsIntoSet
@Provides
@Named(AREA_TAG)
Set<String> getDebugArea() {
    return new HashSet<>(Arrays.asList(mService.getResources().getStringArray(R.array.debugArea)));
}
@ElementsIntoSet
@Provides
Set<String> getDebugType() {
    return new HashSet<>(Arrays.asList(mService.getResources().getStringArray(R.array.debugType)));
}

А еще

@Component(modules = ServerServiceModule.class)
public interface ServerServiceComponent {
    void injects(ServerService service);
    Set<String> stringsDebug();
}
READ ALSO
Android Получение разной даты в миллисекундах

Android Получение разной даты в миллисекундах

У меня назрел такой вопрос, как получить нужное время по дате в миллисекундахВремя которое сейчас можно получить просто введя System

147
Логическая ошибка

Логическая ошибка

Решаю задачу на Java:

162
GlassFish не видит Java

GlassFish не видит Java

При попытке запуска GlassFish выдает ошибку

207