Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.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
哪个版本的RoboGuice可以与Android SDK 8配合使用?_Android_Tdd_Guice_Android 2.2 Froyo_Roboguice - Fatal编程技术网

哪个版本的RoboGuice可以与Android SDK 8配合使用?

哪个版本的RoboGuice可以与Android SDK 8配合使用?,android,tdd,guice,android-2.2-froyo,roboguice,Android,Tdd,Guice,Android 2.2 Froyo,Roboguice,这可能是我问题的第一部分 基本上,我正在为版本1.1.2的实际注入而挣扎。我已经阅读了网站上的几页,我觉得我遗漏了一些东西 基本上我已经完成了机器人应用程序的扩展。我已经重写了addApplicationModules方法。我甚至做了一个模块 我的模块如下所示: public class DataRepository extends AbstractAndroidModule { @Override protected void configur

这可能是我问题的第一部分

基本上,我正在为版本1.1.2的实际注入而挣扎。我已经阅读了网站上的几页,我觉得我遗漏了一些东西

基本上我已经完成了机器人应用程序的扩展。我已经重写了addApplicationModules方法。我甚至做了一个模块

我的模块如下所示:

    public class DataRepository extends AbstractAndroidModule
    {

        @Override
        protected void configure() {
             /*
              * This tells Guice that whenever it sees a dependency on a TransactionLog,
              * it should satisfy the dependency using a DatabaseTransactionLog.
              */
            bind(IDataBaseAdapter.class).to(DataBaseAdapter.class);
        }

    }
在我的适配器中,我有:

    public class DataBaseAdapter implements IDataBaseAdapter
    {
        private DataBaseHelper _dbHelper;

        private SQLiteDatabase _db;

        @Inject 
        protected static Provider<Context> contextProvider;

        public DataBaseAdapter()
        {
            _dbHelper = new DataBaseHelper(contextProvider.get());
        }
    }
我迷路的几个原因是我来自.NET和Flash/ActionScript的背景,加上我只使用了StructureMap而不是Ninject(在.NET世界中),我听说Guice的设计考虑了Ninject的一些想法。有人能帮我找出这一小块吗

我真的很想专注于使用1.1.2,而不是跳到2.x的RoboGuice。。。特别是因为它还在测试阶段,所以我希望大家不要介意

再次感谢,
Kelly

Android与独立/托管的java应用程序截然不同。您没有main(),但有某些活动单元,由android框架管理(活动、服务、广播接收器)

DI是一种技术,它允许您通过连接在一起来消除布尔板代码 以良好的面向对象方式创建零件

由于您的工作单元主要是活动,您应该使用onCreate()方法连接/创建协作对象,并且有专用的onResume()和onPause()方法(请参阅Actvity lifecycle)

经验法则是,是否每次活动失去焦点时都需要重新启动该程序?如果是,请在inResume()/onPause()中初始化/销毁它,否则-在onCreate()中

如果您希望与整个应用程序共享对象(在同一个JVM中运行),则可以在android中使用单例模式。因此,您可能只是拥有singleton injector factory,并从任何地方获得它:

 InjectorFactory.getInstance(<context if necessary?>).getInstance(whatever you need);
InjectorFactory.getInstance().getInstance(无论您需要什么);

好的,我已经知道需要什么了,但是在看到所有的信息漂浮在那里之后,我不太确定为什么

我基本上做了这个改变,现在我的测试通过了

public class DataBaseAdapter implements IDataBaseAdapter
{
    private DataBaseHelper _dbHelper;

    private SQLiteDatabase _db;

    @Inject
    public DataBaseAdapter(Provider<Context> contextProvider)
    {
        _dbHelper = new DataBaseHelper(contextProvider.get());
    }
}
公共类DataBaseAdapter实现IDataBaseAdapter
{
私有数据库助手_dbHelper;
私有SQLiteDatabase_db;
@注入
公共数据库适配器(提供程序上下文提供程序)
{
_dbHelper=newdatabasehelper(contextProvider.get());
}
}
虽然我喜欢使用构造函数作为注入工具,但考虑到我看到的示例是某种反射类注入,我想知道为什么它必须以这种方式工作

总之,这就是这一部分。希望其他人会觉得这很有用

干杯,
凯利

感谢您的回复。我理解getInstance方法。很抱歉,我没有说得更清楚,但我想弄清楚的是,有一种你“注射”的方式。。。例如:@Inject私有IDataProvider提供程序;在模块中,我会这样声明这个项:bind(IDataProvider.class).to(DataProvider.class);为了清晰起见,我还更新了上面的示例,将我在这里写的示例包括在内。我已经更新了上面的信息。从下面开始,感谢Konstantin Pribluda的帮助,我不太担心getInstance方法,但为什么模块似乎没有加载或缺少数据。
 InjectorFactory.getInstance(<context if necessary?>).getInstance(whatever you need);
public class DataBaseAdapter implements IDataBaseAdapter
{
    private DataBaseHelper _dbHelper;

    private SQLiteDatabase _db;

    @Inject
    public DataBaseAdapter(Provider<Context> contextProvider)
    {
        _dbHelper = new DataBaseHelper(contextProvider.get());
    }
}