Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓-匕首注入非活动或碎片_Java_Android_Dagger 2 - Fatal编程技术网

Java 安卓-匕首注入非活动或碎片

Java 安卓-匕首注入非活动或碎片,java,android,dagger-2,Java,Android,Dagger 2,因此,我们在应用程序中使用Dagger2,但现在我想将其注入到一个不是活动或片段的类中。我怎样才能做到这一点。因此,我有一个我想注入的类: public class Analytics { private final PageMap pagesByActivity; private final HitFactory hitFactory; private final Provider<String> storeIdProvider; private

因此,我们在应用程序中使用Dagger2,但现在我想将其注入到一个不是活动或片段的类中。我怎样才能做到这一点。因此,我有一个我想注入的类:

public class Analytics {

    private final PageMap pagesByActivity;
    private final HitFactory hitFactory;
    private final Provider<String> storeIdProvider;
    private final Provider<StockChecker> stockCheckerProvider;
    public Analytics(PageMap pagesByActivity, HitFactory hitFactory,
                                    Provider<String> storeIdProvider,
                                    Provider<Checker> checkerProvider,
                                    String suiteIds) {

            this.pagesByActivity = pagesByActivity;
            this.hitFactory = hitFactory;
            this.storeIdProvider = storeIdProvider;
            this.checkerProvider = checkerProvider;
    }
}
公共类分析{
私有最终页面映射页面活动;
私人最终工厂;
私人最终提供者StoredProvider;
私人最终提供者StockChecker提供者;
公共分析(PageMap pagesByActivity、HitFactory、HitFactory、,
提供者StoredProvider,
提供者检查提供者,
字符串suiteds){
this.pagesByActivity=pagesByActivity;
this.hitFactory=hitFactory;
this.storeIdProvider=storeIdProvider;
this.checkerProvider=checkerProvider;
}
}
这门课的任务是激发分析能力。我想感染一个名为deviceInfo的类,我已经有了一个提供方法


如果我现在尝试注入,它会编译并运行,但随后崩溃,给我一个空对象

将deviceInfo作为构造函数参数添加到Analytics类。然后在Dagger模块
提供的方法中,在参数中包含deviceInfo。这意味着您需要让Dagger为您创建分析对象。Dagger将首先创建DeviceInfo对象,然后再创建Analytics对象。模块中的代码应类似于以下内容:

@Provides
DeviceInfo provideDeviceInfo(){
    return new DeviceInfo();
}

@Provides
Analytics provideAnalytics(DeviceInfo deviceInfo){
    return new Analytics(deviceInfo, [... other parameters]);
}

将deviceInfo作为构造函数参数添加到Analytics类中。然后在Dagger模块
提供的方法中,在参数中包含deviceInfo。这意味着您需要让Dagger为您创建分析对象。Dagger将首先创建DeviceInfo对象,然后再创建Analytics对象。模块中的代码应类似于以下内容:

@Provides
DeviceInfo provideDeviceInfo(){
    return new DeviceInfo();
}

@Provides
Analytics provideAnalytics(DeviceInfo deviceInfo){
    return new Analytics(deviceInfo, [... other parameters]);
}

这也可以通过构造函数注入来完成

public class Analytics {

    @Inject
    public Analytics(PageMap pagesByActivity, HitFactory hitFactory,
                                    Provider<String> storeIdProvider,
                                    Provider<Checker> checkerProvider,
                                    String suiteIds,
                                    DeviceInfo deviceInfo) {

            this.deviceInfo = deviceInfo;
    }
}
外接程序AppComponent

void inject(BootReceiver receiver);

这也可以通过构造函数注入来完成

public class Analytics {

    @Inject
    public Analytics(PageMap pagesByActivity, HitFactory hitFactory,
                                    Provider<String> storeIdProvider,
                                    Provider<Checker> checkerProvider,
                                    String suiteIds,
                                    DeviceInfo deviceInfo) {

            this.deviceInfo = deviceInfo;
    }
}
外接程序AppComponent

void inject(BootReceiver receiver);