配置RoboGuice时没有任何反应

时间:2011-11-05 04:54:10

标签: android guice roboguice

我是RoboGuice的新手,我正在尝试设置我的活动以使用DI。但是,当我尝试使用它时没有任何反应。在我调用“super.onCreate(savedInstanceState);”后,我只得到一个没有内容的空白黑色窗口,并且没有记录我的Activity.onCreate()方法。

请参阅以下两段代码:

public class ClikClokActivity extends RoboActivity{
@Inject 
private TileAdapter tileAdapter;
@Inject
private GameLogicService gameLogicService;  
@Inject
private GridOperationQueue gridOperationQueue;
private GridView gridView;
@Inject
private Handler handler;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

    Log.v(this.getClass().toString(), "Entering onCreate");

    super.onCreate(savedInstanceState);
    Log.v(this.getClass().toString(), "Never logs this with RoboGuice");
    setContentView(R.layout.main);
    gridView = (GridView) findViewById(R.id.gridview);
    gridView.setNumColumns(Constants.GRID_WIDTH);
    gridView.setAdapter(tileAdapter);

    Log.v(this.getClass().toString(), "GridView initialized");

    gridOperationQueue.start();

    Log.v(this.getClass().toString(), "Completed onCreate");
}

public class ClikClokApplication extends RoboApplication{

@Override
protected void addApplicationModules(List<Module> modules) {
    modules.add(new ClikClokModule());
}

}

公共类ClikClokModule扩展了AbstractAndroidModule {

@Override
protected void configure() {

}

}

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.clikclok"
  android:versionCode="1"
  android:versionName="1.0">


<application android:name="com.clikclok.ClikClokApplication" android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".ClikClokActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

</application>

如果你查看上面的代码,我永远不会得到第二次记录。但是,如果我要从Activity扩展而从我的清单中删除android:name =“com.clikclok.ClikClokApplication”属性,那么我确实得到了第二次日志记录(虽然没有使用NullPointers,因为没有执行初始化)。

那么super.onCreate(savedInstanceState)中可能会发生什么;这导致我的申请无法运作?

由于

从上面更新:

我花了相当多的时间来研究这个问题,使用Eclipse的调试器现在可以看到我的代码似乎挂在RoboGuice中。

以下代码来自InjectorImpl类:

public void injectMembers(Object instance) {
// Reaches here but...
MembersInjector membersInjector = getMembersInjector(instance.getClass());
// ....this comment is never reached
membersInjector.injectMembers(instance);

}

所以我使用调试器和FailableCache类挖掘了Guice 3.0代码:

public V get(K key, Errors errors) throws ErrorsException {
// Reaches here....
Object resultOrError = delegate.get(key);
// ...but not here
if (resultOrError instanceof Errors) {
  errors.merge((Errors) resultOrError);
  throw errors.toException();
} else {
  @SuppressWarnings("unchecked") // create returned a non-error result, so this is safe
  V result = (V) resultOrError;
  return result;
}

}

从地图检索密钥时,它是如何挂起的呢?我对代码不够熟悉,排除故障非常困惑。 任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:0)

尝试在configure方法中添加一些绑定。

您也可以尝试像这样注入网格视图     @InjectView(R.id.gridview)     GridView gridView;

我希望这会对你有所帮助。

问候。

答案 1 :(得分:0)

这是因为我尝试将Activity类注入服务类。

所以我试图@Inject一个“ClikClokActivity”的实例而不是“Activity”。

一旦我删除了这次注射尝试,一切正常。不确定这是否暴露了RoboGuice或Guice本身的其他问题。